[review] @Aspect AOP

corncheese·2023년 11월 11일
0

@Aspect 프록시 적용

스프링 애플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성되어있는 어드바이저를 만들어서 스프링 빈으로 등록하면 된다.
나머지는 자동 프록시 생성기가 모두 자동으로 처리해준다.

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

  • 참고 ) @Aspect는 관점 지향 프로그래밍(AOP)를 가능하게 하는 AspectJ 프로젝트에서 제공하는 애노테이션이다.

LogTraceAspect

자동 프록시 생성기는
@Aspect를 보고 Advisor로 변환해서 저장하고, 어드바이저를 기반으로 프록시를 생성한다.


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

  • @Aspect 어드바이저 빌더
    BeanFactoryAspectJAdvisorsBuilder 클래스이다. @Aspect의 정보를 기반으로 포인트컷, 어드바이스, 어드바이저를 생성하고 보관하는 것을 담당한다.

  1. 생성 : 스프링 빈 대상이 되는 객체를 생성한다.
  2. 전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달한다.
  3. Advisor 빈 조회 : 스프링 컨테이너에서 Advisor 빈을 모두 조회한다.
  4. @Aspect Advisor 조회 : @Aspect 어드바이저 빌더 내부에 저장된 Advisor를 모두 조회한다.
  5. 프록시 생성 : 3, 4에서 조회한 Advisor에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단한다.
  6. 빈 등록

정리

@Aspect를 사용해서 애노테이션 기반 프록시를 매우 편리하게 적용했다. 실무에서 프록시를 적용할 때는 대부분 이 방식을 사용한다.

0개의 댓글