Spring 是如何解决这个问题的:bean A 依赖于 bean B,而 bean B 依赖于 bean A。
最佳答案
Spring reference manual解释了如何解决循环依赖。 bean 先被实例化,然后相互注入(inject)。
考虑这个类:
package mypackage;
public class A {
public A() {
System.out.println("Creating instance of A");
}
private B b;
public void setB(B b) {
System.out.println("Setting property b of A instance");
this.b = b;
}
}
和一个类似的类B
:
package mypackage;
public class B {
public B() {
System.out.println("Creating instance of B");
}
private A a;
public void setA(A a) {
System.out.println("Setting property a of B instance");
this.a = a;
}
}
如果你有这个配置文件:
<bean id="a" class="mypackage.A">
<property name="b" ref="b" />
</bean>
<bean id="b" class="mypackage.B">
<property name="a" ref="a" />
</bean>
使用此配置创建上下文时,您会看到以下输出:
Creating instance of A
Creating instance of B
Setting property a of B instance
Setting property b of A instance
请注意,当 a
被注入(inject) b
时,a
尚未完全初始化。
关于java - Spring中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3485347/