트랜잭션을 위한 어드바이저
트랜잭션을 위한 어드바이저는 ProxyTransactionManagementConfiguration
에서 등록되는 BeanFactoryTransactionAttributeSourceAdvisor
를 통해 생성됩니다.
AspectJ로 선언한 어드바이저
우선 AspectJ는 @EnableAspectJAutoProxy
를 통해 활성화합니다.
이후 @EnableAspectJAutoProxy
를 통해 등록된 AspectJAutoProxyRegistrar
에서 AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry)
를 통해 org.springframework.aop.config.internalAutoProxyCreator
가 생성됩니다.
생성된 클래스는 AbstractAutoProxyCreator
를 상속하고 있고 BPP를 등록하는 과정에서 postProcessBeforeInstantiation
메서드를 통해 AspectJ로 선언한 어드바이저를 등록합니다.
프록시 객체 생성 및 어드바이저 순서
어드바이저는 빈 초기화 과정의 마지막 단계인 BPP의 postProcessAfterInitialization
메서드를 적용하며 프록시 객체를 만드는 데 사용됩니다.
이때 어드바이저는 AbstractAutoProxyCreator
의 findEligibleAdvisors
를 통해 조회하고 정렬되는데 그 결과는 사진과 같습니다.
이때 순서는 org.springframework.core.Ordered 인터페이스나 org.springframework.core.annotation.Order 혹은 org.springframework.core.annotation.AnnotationAwareOrderComparator를 통해 정해집니다.
결론
사진을 통해 알 수 있듯 AspectJ로 선언한 어드바이저가 먼저 실행되고 트랜잭션을 위한 어드바이저가 나중에 실행됨을 알 수 있습니다.
'스프링' 카테고리의 다른 글
Webflux, ReactiveTransactionManager 환경에서의 이벤트 발행 (0) | 2025.03.24 |
---|---|
인터페이스 타입으로 등록한 빈을 구현체 타입으로 DI 받지 못한 이유 (0) | 2025.03.19 |
내가 이해한 스프링의 빈 생명 주기 (0) | 2025.03.17 |
트랜잭션 커밋과 AOP 중 어떤 것이 먼저 실행 될까? (0) | 2025.03.15 |
Parallel Test Execution (0) | 2025.03.13 |