springboot專案-宣告式事務失效

遠啟發表於2021-01-30

1.專案背景

  • 整合了shiro配置

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

相關文章