[英]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?
另一种选择是使用@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.