【发布时间】:2014-01-17 09:28:01
【问题描述】:
我听说circular dependencies 是由setter 注入引起的。所以我试着自己检查一下。看来我只能通过constructor 注入来重现circular dependency(参见下面的代码)。
所以问题:
- 我可以通过
setter注入完成circular dependency吗? -
如何在下面的代码中解析
circular dependencies?public class AConstr { private final BConstr b; public AConstr(BConstr bConstr) { System.out.println("AConstructor:: constructor"); this.b = bConstr; } } public class BConstr { private final AConstr a; public BConstr(AConstr aConstr) { System.out.println("BConstructor:: constructor"); this.a = aConstr; } } <bean id="aConstr" class="pack.bean.AConstr"> <constructor-arg ref="bConstr"/> </bean> <bean id="bConstr" class="pack.bean.BConstr"> <constructor-arg ref="aConstr"/> </bean>
【问题讨论】:
-
循环依赖可以用 setter 来解决,但这不是原因。原因是 AConstr 需要 BConstr ,反之亦然。当使用构造函数而不是设置器时,这将是可见的,但无论哪种方式,你都有一个循环依赖。
标签: java spring dependency-injection