Spring bean stackoverflow错误

时间:2017-03-23 11:18:49

标签: java spring spring-mvc circular-dependency

假设我有两个班级

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?

2 个答案:

答案 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());
}