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

时间:2014-09-23 14:19:23

标签: java spring

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

Bean#1 -> Bean#2 -> Bean#1

如何解决此问题?

2 个答案:

答案 0 :(得分:8)

这是Spring Reference

  

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

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

修改

在你的情况下BeanCurrentlyInCreationException主要是由于构造函数注入而引起的。如果是这种情况大多使用setter注入而不是构造函数注入将解决问题。构造函数注入通常会引起鸡蛋问题!

答案 1 :(得分:6)

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

BeanA -> BeanB

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

BeanA -> BeanC
BeanB -> BeanC