포인트컷(pointcut) : 부가 기능을 어디에 적용할지, 어디에 적용하지 않을지 판단하는 필터링 로직. 주로 클래스와 메서드 이름으로 필터링을 한다.
어드바이스(advice) : 프록시가 호출하는 부가 기능, 프록시 로직으로 생각하면 된다.
어드바이저(advisor) : 단순하게 하나의 포인트컷과 하나의 어드바이스를 가지고 있는 것, 어드바이저 = 포인트컷1+어드바이스1
※ 중요 : 스프링은 AOP를 적용할 때, 최적화를 진행해서 프록시 객체는 하나만 만들고, 하나의 프록시에 여러 어드바이저를 적용한다. 즉, 하나의 target에 여러 AOP가 동시에 적용되어도 스프링 AOP는 target마다 하나의 프록시만 생성한다.
public class AdvisorTest {
@Test
void advisorTest1(){
ServiceInterface target = new ServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(Pointcut.TRUE, new TimeAdvice());
proxyFactory.addAdvisor(advisor);
ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
proxy.save();
proxy.find();
}
}
댓글