spring boot 运行、打包报循环依赖错误异常

最近的springboot项目开发时运行没问题,打包运行时报错:抛出BeanCurrentlyIn CreationException异常:Requested bean is currently in creation: Is there an unresolvable circular reference? 查了下原因是循环依赖问题。

  • 什么是循环依赖?

当我们有两个(当然也可能是多个)类A、B,但是A依赖于B,但B也依赖与A,这就是循环依赖!
A->B->A...

  • 为什么会发生?

当程序启动,Spring Context加载所有的Bean时,会尝试按他们运行的工作顺序创建Bean,
没发生循环依赖的情况:
A->B->C
这里C依赖于B,B依赖于A,不会发生异常,程序正常编译。
循环依赖的发生于
你使用构造函数注入的时候,其他注入方式不会发生此问题,
因为其他方式会在程序用到这个依赖时,才会注入,而不是发生在Spring Context加载阶段。

  • 处理方法

重新设计你的程序:
请不要质疑,你的程序设计发生了问题!,分层问题没有处理好,请重新设计它。
当然,你还可以尝试以下常用的两种解决方案。
使用@Lazy注解: 第一种方法是标记@Lazy注解到你的构造函数的参数内,让Spring懒惰的初始化这个Bean,即给这个Bean创建一个代理,当真正使用到这个Bean时才会完全创建。

--------------------- 
原文:https://blog.youkuaiyun.com/qq_35624642/article/details/87091369 

循环依赖是指在程序中存在两个或多个类之间相互依赖的情况,形成一个循环的依赖链。当程序启动时,Spring Context加载所有的Bean时,会尝试按照它们的工作顺序创建Bean。在没有循环依赖的情况下,这个过程是正常的。但是当存在循环依赖时,就会出现问题。 循环依赖通常发生在使用构造函数注入的情况下,其他注入方式不会出现这个问题,因为其他方式会在程序使用到这个依赖时才会注入,而不是在Spring Context加载阶段发生。 解决循环依赖问题的方法有多种。一种方法是重新设计你的程序,确保分层问题得到正确处理。另一种常用的解决方案是使用@Lazy注解。你可以将@Lazy注解标记在构造函数的参数内,这样Spring会懒惰地初始化这个Bean,即给这个Bean创建一个代理,只有在真正使用到这个Bean时才会完全创建。 所以,如果之前没有循环依赖错误,可能是因为之前的代码没有出现循环依赖的情况。但是如果现在出现了循环依赖错误,你可以尝试重新设计你的程序或者使用@Lazy注解来解决这个问题。 #### 引用[.reference_title] - *1* *2* *3* [spring boot 运行打包循环依赖错误异常](https://blog.youkuaiyun.com/GAOXINXINGgaoxinxing/article/details/97640441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值