Spring Bean循环依赖问题:我的错误分析是否正确?
关于Spring循环依赖错误的分析验证
问题背景
- 本周刚学习Java Spring,编写了两个版本的代码:
- 版本1:包含
Mello类、标注@Configuration的Hello配置类及Main类,运行时触发循环依赖错误 - 版本2:移除
Mello类后无报错
- 版本1:包含
- 自我分析:当Spring识别到
nameBean时,创建Hello对象时发现依赖MelloBean,查找创建逻辑时又回到name方法,导致重复调用形成循环
你的分析是正确的
这种情况属于Spring配置类中的方法间循环依赖,具体逻辑如下:
- Spring初始化容器时,会将
@Configuration类中标注@Bean的方法视为Bean的创建逻辑 - 若
Hello配置类里,创建HelloBean的方法依赖MelloBean,而创建MelloBean的方法又间接依赖回HelloBean(或通过name方法形成闭环),就会触发循环 - Spring默认会用CGLIB代理
@Configuration类来保证Bean的单例性,当方法间出现循环调用时,代理逻辑无法打破这个闭环,最终抛出循环依赖异常
举个贴合你场景的代码示例(还原可能的写法):
@Configuration public class Hello { @Bean public Hello hello() { return new Hello(mello()); } @Bean public Mello mello() { return new Mello(name()); } @Bean public String name() { return "test"; } }
这里hello()调用mello(),mello()调用name(),如果Hello类的构造或内部逻辑又依赖name对应的Bean,就会形成循环调用链——和你分析的逻辑完全吻合。
内容的提问来源于stack exchange,提问作者Agrudge Amicus
相关产品推荐
相关产品推荐

