假设我有两个班级
A类
B类
现在, A类依赖于B类,B类依赖B类。
看起来像
class A {
private B b;
public A(B b) {
this.b = b;
}
}
class B {
private A a;
public B(A a) {
this.a = a;
}
}
相同的bean配置将是
@Bean
public A getA() {
return new A(getB());
}
@Bean
public B getB() {
return new B(getA());
}
此代码导致死锁情况,因为一个人依赖另一个。在这种情况下如何实例化Beans?
答案 0 :(得分:1)
尝试使用基于setter的依赖注入。主题也在Circular dependency in spring
进行了讨论答案 1 :(得分:1)
其他选项是使用 @PostConstruct 注释。在 Plog 提出的答案中,ypu有一个问题,即A的初始化是在B的init方法中完成的。使用postConstruct,你可以有一个专用的方法 resolveCircularDependencies 。
它只是一个外观上的改变,但明确说明为什么以这种方式完成布线(当你忘记循环的存在,或者其他程序员遇到代码时,这很方便)。
@Bean
public A getA(){
return new A();
}
@Bean
public B getB(){
return new B();
}
@PostConstruct
public void resolveCircularDependencies() {
getB().setA(getA());
getA().setB(getB());
}