【SpringBoot循环依赖问题解决】

事件起因

今天在做一个新项目,分布式项目,引入了一个第三方项目,然后在根目录的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注解(延迟加载)
参照: 其他情况解决方案.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值