繁体   English   中英

Spring bean stackoverflow错误

[英]Spring bean stackoverflow error

假设我有两节课

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

此代码会导致死锁,因为一个要依赖另一个。 在这种情况下如何实例化Bean?

尝试使用基于setter的依赖项注入。 春季循环依赖中也讨论了主题

另一种选择是使用@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());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM