spring boot循环依赖解决方案,spring解决依赖循环
前言:
春天的豆管一直是全系统津津乐道的。尤其是Bean的循环依赖是很多面试官最喜欢考察的2B知识点之一。
但实际上,项目中存在Bean的循环依赖,这是代码质量低下的表现。大多数人都希望框架层给自己擦屁股,导致整个代码的设计越来越差。最后,使用一些奇怪的技巧来填补所犯的错误。
好在SpringBoot终于受不了这种辱骂,默认禁用循环依赖!
从2.6版本开始,如果你的项目存在循环依赖,SpringBoot会拒绝启动!
验证代码小片段:
为了验证这个函数,我们只需要两小段代码。
CircularDependencyA.java
@ Component @ requiredargsconstructorpubliclasscirculardependency ya { privatefinallcirculardependencybcircb;}CircularDependencyB.java
@ Component @ requiredargsconstructorpubliclasscirculardependencyb { privatefinallcirculardependencyacirca;}RequiredArgsConstructor注释,在lombok包中,用于实现简单的构造函数注入。不出所料,当我们启动代码时,我们报告了一个错误~ ~
报错如下:
thedependenciesofsomeofthebeansintheapplicationcontextformacycle:circulardependencyadefinedinfile[cir/circulardependencya.class] action:relyinguponcircularreferencesisdiscouragedandtheyareprohibitedbydefault.updateyoursapplicationtoremovedependencycyclebetween beans . A salastrestore,it maybepossible breakthe cycleautomatically by setting spring . main . allow-circular-references to true。
当然,有些鸟人已经长大了,循环依赖无处不在,改代码越来越不现实。然后,您还可以通过在yaml中配置参数来临时打开循环依赖。
spring . main . allow-circular-references=true看来SpringBoot对恶势力的容忍度还是不够坚定!
绕过SpringBoot拦截的方法不止一种,比如使用@Lazy注释延迟初始化。然而这些都是治标不治本,辜负了跳羚的苦心。
做对的事:
其实我们一直往下看代码,会发现这个开关其实就是Spring的功能。
AbstractAutowireCapableBeanFactory # allowCircularReferences/* *是否在bean之间自动trytoresolvecurereferences。*/privatebooleanallowcoungrreferences=true;很长一段时间,SpringBoot的值默认为真。但这种纵容造成了大量低质量的代码,以至于新员工一直在给老员工擦屁股。
默认情况下,将该值设置为false是正确的做法。至少,工程师写低质量代码的时候,可以知道自己在做什么,而不是一步一步拖延隐患,让代码腐败。
不得不称赞SpringBoot。太好了!
本文关于SpringBoot禁止循环依赖的解释到此为止。关于SpringBoot循环依赖的更多信息,请搜索之前关于popular IT的文章或者继续浏览以下相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。