You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
new DefaultPointcutAdvisor : Advisor 인터페이스의 가장 일반적인 구현체, 생성자를 통해 하나의 포인트컷과 하나의 어드바이스를 넣어주면 됨, 어드바이저는 하나의 포인트컷과 하나의 어드바이스로 구성됨
Pointcut.True : 항상 true를 반환하는 포인트컷
proxyFactory.addAdvisor(advisor) : 프록시 팩토리에 적용할 어드바이저를 지정, 어드바이저는 내부에 포인트컷과 어드바이스를 모두 가짐, 따라서 어디에 부가 기능을 적용해야 할지 어드바이저 하나로 알 수 있음, 프록시 팩토리를 사용할 때 어드바이저는 필수
그런데 생각해보면 이전에 분명히 proxyFactory.addAdvice(new TimeAdvice()) 이렇게 어드바이저가 아니라 어드바이스를 바로 적용, 이것은 단순히 편의 메서드이고 결과적으로 해당 메서드 내부에서 지금 코드와 똑같은 다음 어드바이저가 생성, DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice())
프록시 팩토리 - 어드바이저 관계
실행 결과
예제 코드2 - 직접 만든 포인트 컷
이번에는 save() 메서드에는 어드바이스 로직을 적용하지만, find() 메서드에는 어드바이스 로직을 적용하지 않자
물론 과거에 했던 코드와 유사하게 어드바이스에 로직을 추가해서 메서드 이름을 보고 코드를 실행할지 말지 분기를 탐, 하지만 이런 기능에 특화되어서 제공되는 것이 바로 포인트컷
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
포인트컷, 어드바이스, 어드바이저 - 소개
포인트컷(Pointcut) : 어디에 부가 기능을 적용할지, 어디에 부가 기능을 적용하지 않을지 판단하는 필터링 로직, 주로 클래스와 메서드 이름으로 필터링, 이름 그대로 어떤 포인트(Point)에 기능을 적용할지 하지 않을지 잘라서(cut) 구분하는 것
어드바이스(Advice) : 이전에 본 것 처럼 프록시가 호출하는 부가 기능, 단순하게 프록시 로직이라 생각하면 됨
어드바이저(Advisor) : 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것 쉽게 이야기해서
포인트컷1 + 어드바이스1
쉽게 기억하기
역할과 책임
AdvisorTest
프록시 팩토리 - 어드바이저 관계
실행 결과

예제 코드2 - 직접 만든 포인트 컷
Pointcut 관련 인터페이스 - 스프링 제공
AdvisorTest - advisorTest2() 추가
MyPointcut
MyMethodMatcher
new DefaultPointcutAdvisor(new MyPointcut(), new TimeAdvice())
save() 호출
find() 호출
예제 코드3 - 스프링이 제공하는 포인트 컷
NameMatchMethodPointcut 사용 코드
실행결과

스프링이 제공하는 포인트컷
예제 코드4 - 여러 어드바이저 함께 적용
여러 프록시 - MultiAdvisorTest
런타임 다음과 같이 동작 - 여러 프록시 사용
여러 프록시 문제
이 방법이 잘못된 것은 아니지만, 프록시를 2번 생성해야 한다는 문제가 있음 만약 적용해야 하는 어드바이저가 10개라면 10개의 프록시를 생성해야 함
하나의 프록시, 여러 어드바이저
MultiAdvisorTest - multiAdvisorTest2() 추가
정리
결과적으로 여러 프록시를 사용할 때와 비교해서 결과는 같고, 성능은 더 좋음
중요
All reactions