首先看下面代码:
/*
循环依赖问题的解决验证
*/
public class test2 {
public static void main(String[] args){
A a=new A();
B b=new B();
a.b=b;
b.a=a;
}
}
class A{
public B b;
// public A(){
// b=new B();
// }
public void printA(){
System.out.println("A");
}
public void printB(){
b.printB();
}
}
class B{
public A a;
// public B(){
// a=new A();
// }
public void printB(){
System.out.println("B");
}
public void printA(){
a.printA();
}
}
分析:
在蓝色部分没有添加,红色部分未打注释之前,编译程序会出现循环依赖问题(报错Exception in thread “main” java.lang.StackOverflowError),原因很简单,A的构造函数里会出现B的引用,但是B的创建又需要A的引用,如此造成死循环,也就是循环依赖问题。而循环依赖又可能会造成内存泄露等致命问题,所以务必要解决!
要解决循环依赖问题,可以进行构造函数的修改(注释掉),然后在添加蓝色部分,实现手动的属性注入,解决依赖注入问题。在Spring框架中,DI依赖注入可以解决循环依赖问题(属性自动注入)。