【发布时间】:2014-09-23 14:19:22
【问题描述】:
假设我有一个依赖于另一个 bean 的 bean,而另一个 bean 依赖于第一个 bean。
Bean#1 -> Bean#2 -> Bean#1
我该如何解决这个问题?
【问题讨论】:
假设我有一个依赖于另一个 bean 的 bean,而另一个 bean 依赖于第一个 bean。
Bean#1 -> Bean#2 -> Bean#1
我该如何解决这个问题?
【问题讨论】:
这是来自Spring Reference
您通常可以相信 Spring 会做正确的事情。它检测到 配置问题,例如对不存在的 bean 的引用和 循环依赖,在容器加载时。弹簧设置属性 并尽可能晚地解决依赖关系,当 bean 是 实际创建的。
所以它实例化两个 bean 并将它们相互注入。
在您的情况下,BeanCurrentlyInCreationException 主要是由于构造函数注入引起的。如果是这种情况,主要使用 setter 注入而不是构造函数注入将解决问题。构造函数注入通常会引发鸡蛋问题!
【讨论】:
您可以通过使用 setter 注入来解决问题。但是,通常这是一个坏主意,因为代码将更难维护和测试。我建议您将代码重构为仅具有单向依赖关系,例如
BeanA -> BeanB
解决这个问题的另一种方法是在第三个bean类中提取公共行为,然后让两个初始类依赖它,例如
BeanA -> BeanC
BeanB -> BeanC
【讨论】: