백엔드/프레임워크
스프링 - @Aspect
JerryTheSWEngineer
2022. 12. 14. 17:47
반응형
정의
- AOP를 가능하게 하는AspectJ에서 프로젝트에서 제공하는 어노테이션.
- 자동 프록시 생성기는 Advisor를 찾아서 프록시를 생성하고 빈에 적용하는 역할을 수행합니다.
또한 자동 프록시 생성기는 또 다른 역할이 있는데 바로 @Aspect 어노테이션을 찾아서 해당 클래스를 Advisor(Pointcut + Advice)로 만들어줍니다.
@Aspect를 Advisor 변환하는 과정
- 스프링 애플리케이션 로딩 시점에 자동 프록시 생성기 호출
- 자동 프록시 생성기가 스프링 컨테이너 내 @Aspect 어노테이션 붙은 스프링 빈 모두 조회
- @Aspect 어드바이저 빌더를 통해 Advisor 생성
- 생성한 Advisor를 @Aspect 어드바이저 빌더 내부에 저장
* @Aspect 어드바이저 빌더는 BeanFactoryAspectJAdvisorsBuilder 클래스 (@Aspect의 정보를 기반으로 Pointcut, Advice, Advisor를 생성하고 보관하는 것을 담당)
자동 프록시 생성기의 작동 과정
- 스프링 빈 대상이 되는 객체 생성
- 생성된 객체를 빈 저장소에 등록하기 전 빈 후처리기에 전달
- 스프링 컨테이너 내 Advisor 빈 모두 조회
- @Aspect 어드바이저 빌더 내부에 저장된 Advisor 모두 조회
- 조회된 Advisor 내 Pointcut을 통해 프록시 적용 대상 확인
- 객체의 클래스 정보와 메서드를 Pointcut에 모두 매칭 한 뒤 조건이 하나라도 만족하면 프록시 적용 대상
- 프록시 적용 대상이라면 프록시 생성 후 프록시 반환
- 프록시 적용 대상이 아니라면 원본 객체를 반환 해 원본 객체를 스프링 빈에 등록
- 프록시 적용 대상이라면 원본 객체가 아닌 프록시를 스프링 빈으로 등록
참고
[SpringBoot] @Aspect 어노테이션 (tistory.com)
[SpringBoot] @Aspect 어노테이션
개요 기존에 빈 후처리기에 대해서 알아봤으며 gradle 혹은 pom.xml에 'org.springframework.boot:spring-boot-starter-aop' 라이브러리를 추가하면 AnnotationAwareAspectJAutoProxyCreator라는 자동 프록시 생성기가 스프링
jaimemin.tistory.com
반응형