스프링부트 자동 설정(리플렉션 사용)으로 빈 후처리기인(BeanPostProcessor를 구현한) AnnotationAwareAspectJAutoProxyCreator가 빈에 자동 등록이 되고 이 빈후처리기는 스프링 빈이 등록된 Advisor(pointcut1 + advice1)들을 찾아 그안에 있는 pointcut으로 프록시를 적용해준다.

Untitled

  1. 생성 : 스프링이 스프링 빈 대상이 되는 객체를 생성한다.( @Bean, 컴포넌트 스캔 모두포함)
  2. 전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달
  3. 모든 Advisor 빈 조회 : 자동프록시 생성기(AnnotationAwareAspectJAutoProxyCreator)를 통해서 빈 후처리기는 스프링컨테이너에서 모든 Advisor를 조회한다. @Aspect가 붙은 클래스를 찾는다.
  4. 프록시 적용 대상 체크 : 앞서 조회한 Advisor에 포함되어 있는 포인트컷을 사용해서 해당 객체가 프록시를 적용할 대상인지 아닌지 판단한다.(포인트 컷에 대한 범위로만 대상 체크) 객체의 클래스 정보는 물론이고 객체의 모든 메서드를 포인트컷 하나하나 모두 매칭해본다.
  5. 프록시 생성 : 프록시 적용 대상이면 프록시를 생성하고 반환 프록시 적용 대상이 아니라면 원본 객체를 반환한다.
  6. 빈등록 : 반환된 객체는 빈으로 등록한다. 프록시라면 프록시로 빈으로 등록

트랜잭션 전파에 대해서 깊게 알아보기 Async, 쓰레드 로컬 등.