0
点赞
收藏
分享

微信扫一扫

【SpringBoot循环依赖问题解决】

古月无语 2022-04-06 阅读 187

事件起因

今天在做一个新项目,分布式项目,引入了一个第三方项目,然后在根目录的pom.xml文件中引入了第三方项目module,启动的时候报错了:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌──->──┐
| com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration
└──<-──┘


Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

问题分析

看这个信息提示好像很简单的问题,就是出现了循环依赖,但是也是要区分的,这里很明显是springboot集成管理分页组件件出现循环依赖的问题,我这里spring-boot-starter-parent用的是2.6.5版本,而在集成分页组件依赖pagehelper-spring-boot-starter的版本是1.2.5版本,找到问题就很好解决了。

解决方案

pagehelper-spring-boot-starter的版本升一下就好了,我直接升到最新版本1.4.1,问题解决;

其他情况

当然也存在其他情况的循环依赖:
类A需要通过构造函数注入的类B的实例(或者B中声明的Bean),而类B需要通过构造函数注入的类A的实例(或者A中声明的Bean)。如果将类A和类B的bean配置为相互注入,则Spring IoC容器会在运行时检测到此循环引用,并引发一个BeanCurrentlyInCreationException。与典型情况(没有循环依赖)不同,bean A和bean B之间的循环依赖关系迫使其中一个bean在被完全初始化之前被注入到另一个bean中。Spring无法判断哪个先哪个后,这个时候就可以使用以下方案解决
1.不使用基于构造函数的依赖注入
2.在字段上使用@Autowired注解,让Spring决定在合适的时机注入。【推荐
3.用基于setter方法的依赖注射取代基于构造函数的依赖注入来解决循环依赖。
4.在@Autowired注解上方加上@Lazy注解(延迟加载)
参照: 其他情况解决方案.

举报

相关推荐

0 条评论