[TIL] - @Aspect 프록시 적용 전, 후

SlowAnd·2024년 1월 5일
0

Today I Learned

목록 보기
15/17
post-thumbnail

@Aspect 프록시 -적용 전 모습

(스프링 부트 - AOP 라이브러리 사용 가정)
스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어 있는 어드바이저( Advisor )를 만들 어서 스프링 빈으로 등록하면 된다.
그러면 나머지는 앞서 배운 자동 프록시 생성기가 모두 자동으로 처리해준다.

자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고, 스프링 빈들에 자동으로 프록시를 적용해준다. (물론 포인 트컷이 매칭되는 경우에 프록시를 생성한다.)

Adviser 생성과 등록을 한번에 처리


@Aspect 프록시 -적용 후

스프링은 @Aspect 애노테이션으로 매우 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원한다.

그리고 @Aspect 를 빈등록 하면, 프록시가 잘 적용 된다.

Adviser 생성 , 등록을 클래스 분리함

자동 프록시 생성기의 추가 기능 살펴보기

자동 프록시 생성기는 2가지 일을 한다.
1. @Aspect 를 보고 어드바이저( Advisor )로 변환해서 저장한다.
2. 어드바이저를 기반으로 프록시를 생성한다.

앞서 자동 프록시 생성기를 학습할 때, 자동 프록시 생성기( AnnotationAwareAspectJAutoProxyCreator )는 Advisor 를 자동으로 찾아와서 필요한 곳에 프록시를 생성하고 적용해준다고 했다.

자동 프록시 생성기는 여기에 추가로 하나의 역할을 더 하는데,
바로 @Aspect 를 찾아서 이것을 Advisor 로 만들어준다.
쉽게 이야기해서 지금까지 학습한 기능에 더해 @AspectAdvisor 로 변환해서 저장하는 기능도 한다.
그래서 이름 앞에 AnnotationAware (애노테이션을 인식하는)가 붙어 있는 것이다.

1. @Aspect 를 어드바이저로 변환해서 저장하는 과정

@Aspect를 어드바이저로 변환해서 저장하는 과정을 알아보자

  • 1. 실행: 스프링 애플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다.
  • 2. 모든 @Aspect 빈 조회: 자동 프록시 생성기는 스프링 컨테이너에서 @Aspect 애노테이션이 붙은 스프링 빈 을 모두 조회한다.
  • 3. 어드바이저 생성: @Aspect 어드바이저 빌더를 통해 @Aspect 애노테이션 정보를 기반으로 어드바이저를 생성한다.
  • 4. @Aspect 기반 어드바이저 저장: 생성한 어드바이저를 @Aspect 어드바이저 빌더 내부에 저장한다.

@Aspect 어드바이저 빌더

BeanFactoryAspectJAdvisorsBuilder 클래스이다. @Aspect 의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다.
@Aspect 의 정보를 기반으로 어드바이저를 만들고, @Aspect 어드 바이저 빌더 내부 저장소에 캐시한다.
캐시에 어드바이저가 이미 만들어져 있는 경우 캐시에 저장된 어드바이저를 반환 한다.

2. 어드바이저를 기반으로 프록시 생성

자동 프록시 생성기의 작동 과정을 알아보자

참조
스프링 핵심 원리 - 고급편

0개의 댓글