一、什么是循环依赖
循环依赖就是循环引用,两个或者多个bean相互之间的持有对方,比如CircleA引用CircleB,CircleB引用CircleC,CircleC引用CircleA,则他们最终反映为一个环。
二、Spring是如何解决循环依赖
Spring容器循环依赖包括构造器循环依赖和setter循环依赖
1、构造器循环依赖
通过构造器注入形成的循环依赖,此依赖无法解决,只能抛出BeanCurrentlyInCreationException异常表示循环依赖。
Spring容器将每一个正在创建的bean标识符放在一个“当前创建bean池”中,bean标识符在创建过程中一直保持在这个池子中,因此如果在创建bean过程中发现自己已经在“当前创建bean池”里时。将抛出BeanCurrentlyInCreationException异常表示循环依赖。而对于创建完毕的bean将从“当前创建bean池”中清除掉。
public class CircleA { private CircleB circleB; public CircleA(CircleB circleB) { this.circleB = circleB; } public void a(){ circleB.b();; } public CircleB getCircleB() { return circleB; } public void setCircleB(CircleB circleB) { this.circleB = circleB; } }public class CircleB { private CircleC circleC; public CircleB(CircleC circleC) {