java - Spring是怎么解决Bean之间的循环依赖的?
本文介绍了java - Spring是怎么解决Bean之间的循环依赖的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
Spring Bean的初始化是首先调用Bean的默认构造器,然后调用set方法对属性进行注入。
如果:
A包含属性B,B包含了属性A。
例子:
@Component
public class A {
@Autowired
private B b;
public void aHello(){
System.out.println("aHello!");
}
public void bothHello(){
aHello();
b.bHello();
}
}
@Component
public class B {
@Autowired
private A a;
public void bHello(){
System.out.println("bHello!");
}
}
public class HelloApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
A a = context.getBean(A.class);
a.bothHello();
}
}
输出:
aHello!
bHello!
A和B循环引用,程序正常运行。请问Spring是怎么解决类似的循环引用问题的?
解决方案
先创建基本的Bean,再依赖注入(DI)。这样就没什么问题,解释得通。
比如顺序如下:
new出A的实例,
new出B的实例,
A Bean中的b字段赋值B的实例,
B bean中的a字段赋值A的实例。
这篇关于java - Spring是怎么解决Bean之间的循环依赖的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文