(스프링 부트 - AOP 라이브러리
사용 가정)
스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어 있는 어드바이저( Advisor
)를 만들 어서 스프링 빈으로 등록하면 된다.
그러면 나머지는 앞서 배운 자동 프록시 생성기
가 모두 자동으로 처리해준다.
자동 프록시 생성기
는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다. (물론 포인 트컷이 매칭되는 경우에 프록시를 생성한다.)
Adviser 생성과 등록을 한번에 처리
스프링은 @Aspect
애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.
그리고 @Aspect
를 빈등록 하면, 프록시가 잘 적용 된다.
Adviser 생성 , 등록을 클래스 분리함
자동 프록시 생성기는 2가지 일을 한다.
1.@Aspect
를 보고 어드바이저(Advisor
)로 변환해서 저장한다.
2. 어드바이저를 기반으로 프록시를 생성한다.
앞서 자동 프록시 생성기를 학습할 때, 자동 프록시 생성기( AnnotationAwareAspectJAutoProxyCreator
)는 Advisor
를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다고 했다.
자동 프록시 생성기는 여기에 추가로 하나의 역할을 더 하는데,
바로 @Aspect
를 찾아서 이것을 Advisor
로 만들어준다.
쉽게 이야기해서 지금까지 학습한 기능에 더해 @Aspect
를 Advisor
로 변환해서 저장하는 기능도 한다.
그래서 이름 앞에 AnnotationAware
(애노테이션을 인식하는)가 붙어 있는 것이다.
@Aspect
를 어드바이저로 변환해서 저장하는 과정@Aspect를 어드바이저로 변환해서 저장하는 과정을 알아보자
@Aspect
애노테이션이 붙은 스프링 빈 을 모두 조회한다.@Aspect
어드바이저 빌더를 통해 @Aspect
애노테이션 정보를 기반으로 어드바이저를 생성한다.@Aspect
어드바이저 빌더 내부에 저장한다.@Aspect 어드바이저 빌더
BeanFactoryAspectJAdvisorsBuilder
클래스이다.@Aspect
의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다.
@Aspect
의 정보를 기반으로 어드바이저를 만들고, @Aspect 어드 바이저 빌더 내부 저장소에 캐시한다.
캐시에 어드바이저가 이미 만들어져 있는 경우 캐시에 저장된 어드바이저를 반환 한다.
자동 프록시 생성기의 작동 과정을 알아보자
참조
스프링 핵심 원리 - 고급편