springboot專案-宣告式事務失效
遠啟發表於2021-01-30
1.專案背景
2. 專案分析
- 由於ShiroFilterFactoryBean實現了FactoryBean介面,所以它會提前被初始化。又因為SecurityManager,SecurityManager依賴於Realm實現類、Realm實現類又依賴於UserService,所以引發所有相關的bean提前初始化。
- ShiroFilterFactoryBean -> SecurityManager -> Realm實現類 -> UserService
- 但是此時還只是ApplicationContext中registerBeanPostProcessors註冊BeanPostProcessor處理器的階段,此時AnnotationAwareAspectJAutoProxyCreator還沒有註冊到BeanFactory中,UserService無法享受到事務處理!
就是說在realm中注入的所有service都會提前載入,連帶注入的service中,如果還有其他service注入也會提前載入,無法享受事務處理。
3.解決方案
- 在realm中注入service時,加上@lazy註解
- 不在realm注入service,而是直接注入mapper