如何在Spring IoC中解决bean之间的循环依赖?

Ale*_*lex 4 java spring

假设我有一个依赖于另一个bean的bean,另一个bean依赖于第一个bean.

Bean#1 -> Bean#2 -> Bean#1
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Abh*_*kar 8

这是来自Spring Reference

你通常可以相信Spring做正确的事.它在容器加载时检测配置问题,例如对不存在的bean和循环依赖关系的引用.当实际创建bean时,Spring会尽可能晚地设置属性并解析依赖关系.

因此它实例化两个bean并将它们互相注入.

编辑

在你的情况下,BeanCurrentlyInCreationException大多数由于构造函数注入而产生.如果是这种情况大多使用setter注入而不是构造函数注入将解决问题.构造函数注入通常会导致鸡蛋问题!


mat*_*sev 6

您可以使用setter注入来解决问题.但是,通常这是一个坏主意,因为代码将难以维护和测试.我建议你重构你的代码只有单向依赖,例如

BeanA -> BeanB
Run Code Online (Sandbox Code Playgroud)

解决这个问题的另一种方法是在第三个bean类中拉出常见行为,然后让两个初始类依赖它,例如

BeanA -> BeanC
BeanB -> BeanC
Run Code Online (Sandbox Code Playgroud)