假设我有一个依赖于另一个bean的bean,另一个bean依赖于第一个bean。
Bean#1 -> Bean#2 -> Bean#1
如何解决此问题?
答案 0 :(得分:8)
你通常可以相信Spring做正确的事。它检测到 配置问题,例如对不存在的bean的引用和 循环依赖,在容器加载时。 Spring设置属性 并且当bean是时,尽可能晚地解析依赖关系 实际创建。
因此它实例化两个bean并将它们互相注入。
在你的情况下BeanCurrentlyInCreationException
主要是由于构造函数注入而引起的。如果是这种情况大多使用setter注入而不是构造函数注入将解决问题。构造函数注入通常会引起鸡蛋问题!
答案 1 :(得分:6)
您可以使用setter注入来解决问题。但是,通常这是一个坏主意,因为代码将难以维护和测试。我建议您重构代码以仅具有单向依赖性,例如
BeanA -> BeanB
解决这个问题的另一种方法是在第三个bean类中拉出常见行为,然后让两个初始类依赖它,例如。
BeanA -> BeanC
BeanB -> BeanC