[Spring AOP] 하나의 프록시, 여러 Advisor

희운·2025년 10월 20일

Spring AOP

목록 보기
1/1

어떤 스프링 빈이 advisor1, advisor2 가 제공하는 포인트컷의 조건을 모두 만족하면 프록시 자동 생성기는 프록시를 몇개 생성할까?

  • 프록시 자동 생성기는 프록시를 하나만 생성한다.
    프록시 팩터리가 생성하는 프록시는 내부에 여러 Advisor등을 포함 할 수 있기 때문이다.

<여러 프록시를 사용했을때>

만약에, 적용해야할 advisor가 10개라면 프록시를 10개 생성해야한다.
이 방법은 매우 비효율적이다.

Spring은 이를 해결하기위해 '프록시 팩토리' 객체를 지원한다.

아래의 코드를 보자

@Test
@DisplayName("하나의 프록시, 여러 어드바이저") void multiAdvisorTest2() {
     //proxy -> advisor2 -> advisor1 -> target
     DefaultPointcutAdvisor advisor2 
     = new DefaultPointcutAdvisor(Pointcut.TRUE,
 new Advice2());
     DefaultPointcutAdvisor advisor1 
     = new DefaultPointcutAdvisor(Pointcut.TRUE,
 new Advice1());
     ServiceInterface target = new ServiceImpl();
     
     ProxyFactory proxyFactory1 = new ProxyFactory(target);
     proxyFactory1.addAdvisor(advisor2);
     proxyFactory1.addAdvisor(advisor1);
     
     ServiceInterface proxy = (ServiceInterface) proxyFactory1.getProxy();
//실행
     proxy.save();
}

코드를 보면 proxyFactory.addAdvisor(adviosr1); , proxyFactory.addAdvisor(adviosr2); 를 통해 두개의 advisor 를 추가하는 코드를 확인할 수 있다.

자동 프록시 생성기는 모든 Advisor 빈들을 조회하고 pointcut의 프록시 적용 대상을 체크한다.

  • advisor1 의 포인트컷만 만족 프록시1개 생성, 프록시에 advisor1 만 포함
  • advisor1 , advisor2 의 포인트컷을 모두 만족 프록시1개 생성, 프록시에 advisor1,advisor2 모두 포함
  • advisor1 , advisor2 의 포인트컷을 모두 만족하지 않음 프록시가 생성되지 않음

자동 프록시 생성기

여기서 가장 중요한것은 '빈'으로 등록되는것은 real객체가 아니라 '프록시 객체' 라는점이다.

두개의 advisor의 포인트컷을 만족 시킬 경우 다음 그림과 같다

프록시를 생성하는 '주체'는 프록시 팩토리이고
자동 프록시 생성기는 프록시 팩토리를 이용해서 프록시를 생성한다.

profile
기록하는 공간

0개의 댓글