• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

解决依赖循环the dependency cycle between beans could not be broken

武飞扬头像
Francis-Yang
帮助1

报错代码:

Despite circular references being allowed, the dependency cycle between beans could not be broken

今天用Java写个功能模块,突然出现了标题所示的错误。原因是,我在A类中引用了B类,然后在B类中引用了A类。报错信息如下图:

学新通

刹那间,我懵了,以前我这么干都还好好的,怎么现在突然就这样啊~

后来查阅各种资料才知道,原来,时代变了!!!!


原来从SpringBoot 2.6.x开始,SpringBoot就不推荐使用循环依赖,要从底层逐渐引导开发者书写规范的代码。
哼~ very very good!


但开发过程中难免还是会遇到依赖循环的的情况,总得有个过程嘛。此处便给出两个解决方案:

一、粗糙、强制的做法,不到万不得已不建议:

在配置文件中,添加以下配置:

spring:
	main:
		# 该属性设为true,就是允许循环引用存在,默认值为false
		allow-circular-references: true

二、比较gentlemen、比较优雅的方法:

该方法也算是Spring官方推荐的做法,他虽然不推荐使用循环依赖,但还是给开发者留了一条路。

在A类中引用B类:

public B getB() {
    return SpringUtil.getBean(B.class);
}

// 使用B中的方法时,如下:
	getB().methodOfB();

在B类中引用A类:

public A getA() {
    return SpringUtil.getBean(A.class);
}

// 使用A中的方法时,如下:
	getA().methodOfA();

不过,既然Spring官方不推荐/禁止使用循环依赖,还是有一定的考量,开发者还是尽量避免出现如此情况。
循环引用乍看没什么问题,但深究起来,出现此种情况,就体现出了设计的不合理。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkikcc
系列文章
更多 icon
同类精品
更多 icon
继续加载