[Spring] @Aspect란, 생성 과정 설명
@Aspect란
AOP(관점 지향 프로그래밍)를 가능하게 하는 AspectJ 프로젝트에서 제공하는 어노테이션이다.
@Aspect를 스프링 프록시에 적용하려면 어드바이저(Advisor)를 만들어서 스프링 빈으로 등록하면 된다.
그러면 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고 스프링 빈에 자동으로 프록시를 적용해준다.
@Aspect 프록시 예제
빨간 박스는 포인트컷 부분이고
초록색 박스는 어드바이스 부분이다.
@Aspect를 어드바이저로 변환해서 저장하는 과정
1. 실행 : 스프링 어플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다.
2. 모든 @Aspect 빈 조회 : 자동 프록시 생성기는 @Aspect 어노테이션이 붙은 스프링 빈을 모두 조회한다.
3. 어드바이저 생성 : @Aspect 어드바이저 빌더를 통해 @Aspect 어노테이션 정보를 기반으로 어드바이저를 생성한다.
4. @Aspect 기반 어드바이저 저장 : 생성한 어드바이저를 @Aspect 어드바이저 빌더 내부에 저장한다.
어드바이저 기반으로 프록시 생성
1. 생성 : 스프링 빈 대상이 되는 객체를 생성한다. (@Bean, 컴포넌트 스캔 모두 포함)
2. 전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다.
3-1. Advisor 빈 조회 : 스프링 컨테이너에서 어드바이저의 빈을 모두 조회한다.
3-2. @Aspect Advisor 조회 : @Aspect 어드바이저 빌드 내부에 저장된 어드바이저를 모두 조회한다.
4. 프록시 적용 대상 체크 : 3-1, 3-2에서 조회한 어드바이저에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단한다.
5. 프록시 생성 : 프록시 적용 대상이면 프록시를 생성하고 프록시를 반환한다. 프록시 적용 대상이 아니면 원본 객체를 반환해서 원본 객체를 스프링 빈으로 등록한다.
6. 빈 등록 : 반환된 객체는 스프링 빈으로 등록된다.