这里是引用
Spring是怎么解循环依赖的问题,不完全版
什么是循环依赖?
所谓循环依赖指的是,在类中A对象有B对象作为属性,而B对又使用A对象作为属性,这样在类的创建过程中就发生了A依赖于B,而B又依赖于A,像这种情况就是循环依赖。
有人说这和死锁很像,但是不要把它和死锁混为一谈
//循环依赖
class A{
private B pro;
}
class B{
private A pro;
}
循环依赖
构造器循环依赖
这种就是构造循环依赖,这种问题是无解的,具体原因后面会提到
//循环依赖
class A{
private B pro;
public A(B pro){
this.pro = pro;
}
}
class B{
private A pro;
public B(A pro){
this.pro=pro;
}
}
set循环依赖
首先我们先不考虑Spring是怎么解决循环依赖的问题,如果我们在以前写代码中循环依赖怎么解决
public static void test(){
A a = new A(); //第一步
B b = new B(); //第二步
a.setPro(b); //第三步
b.setPro(a); //第四步
}
class A{
private B pro;
public void setPro(B pro){
this.pro=pro;
}
}
class B{
private A pro;
public void setPro(A pro){
this.pro=pro;
}
}
这是不是一个简单的循依赖
先创建对象a实例,再创建对象b实例
a实例中属性b指向b实例 (b对象地址,在栈中对象引用内存地址)
a中的pro属性是不是指向了b @503
然后a对象是不是已经创建完成了,只不过a对象中的pro属性b还没有完成赋值
只要再给b中pro属性值指向a (a对象内存地址)
整个循环依赖问题是不是,迎刃而解了