목차
참고
본 포스트는 김영한의 스프링 핵심 원리 - 고급편 내용을 참고해 만들었습니다.
여러 Advisor 와 함께 적용
하나의 Target 에 여러 Advisor 를 적용한다.
ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target);
DefaultPointcutAdvisor advisor1 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice1());
proxyFactory.addAdvisor(advisor1); ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
ProxyFactory proxyFactory2 = new ProxyFactory(proxy);
DefaultPointcutAdvisor advisor2 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice2());
proxyFactory2.addAdvisor(advisor2); ServiceInterface proxy2 = (ServiceInterface) proxyFactory2.getProxy();
proxy2.save();
|
00:36:05.734 [Test worker] INFO hello.proxy.advisor.MultiAdvisorTest$Advice2 - advice2 호출 00:36:05.737 [Test worker] INFO hello.proxy.advisor.MultiAdvisorTest$Advice1 - advice1 호출 00:36:05.737 [Test worker] INFO hello.proxy.common.service.ServiceImpl - save 호출
|
하나의 프록시로 여러개의 Advisor 적용
위에서는 여러 Advisor 를 적용하기 위해서는 여러개의 프록시를 생성 해야 한다는 문제점이 있다.
스프링 AOP 에서는 하나의 프록시만 생성 하고 여러개의 Advisor 를 적용 할 수 있도록 지원한다.
여러개의 Advisor 를 등록 후 호춯될때 순서는 등록한 순서대로 호출됩니다.
DefaultPointcutAdvisor advisor1 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice1()); DefaultPointcutAdvisor advisor2 = new DefaultPointcutAdvisor(Pointcut.TRUE, new Advice2());
ServiceInterface target = new ServiceImpl(); ProxyFactory proxyFactory = new ProxyFactory(target);
proxyFactory.addAdvisor(advisor2); proxyFactory.addAdvisor(advisor1); ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();
proxy.save();
|
23:30:55.675 [Test worker] INFO hello.proxy.advisor.MultiAdvisorTest$Advice2 - advice2 호출 23:30:55.676 [Test worker] INFO hello.proxy.advisor.MultiAdvisorTest$Advice1 - advice1 호출 23:30:55.677 [Test worker] INFO hello.proxy.common.service.ServiceImpl - save 호출
|