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

版权声明:本文为djq-jone原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/djq-jone/p/14348343.html