看了大佬的资料,自己写一篇,当个笔记。
如有侵权,就会删除。
目录:
-
什么是循环依赖?
-
Spring如何解决循环依赖?
1、什么是循环依赖?
简单的来说就是A依赖B的同时,B依赖A。在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象。
点击查看代码
@service
public class ServiceImplA {
public ServiceImplA (){
System.out.println("A的构造方法执行了...");
}
private B b;
@Autowired
public void setServiceImplB (B b) {
this.b = b;
System.out.println("给A注入B");
}
}
@service
public class ServiceImplB {
public ServiceImplB (){
System.out.println("B的构造方法执行了...");
}
private A a;
@Autowired
public void setServiceImplB (A a) {
this.a = a;
System.out.println("给B注入了A");
}
}
2、Spring如何解决循环依赖?
步骤:
1、实例化A,生成A的ObjectFactory对象
2、A的ObjectFactory对象存到三级缓存
3、需注入B,但没有B
4、实例化B,生成B的ObjectFactory对象,并且存到三级缓存
5、需要注入A,
6、通A的ObjectFactory对象创建A的代理对象
7、A代理对象存到二级缓存,删除A的ObjectFactory对象
8、A注入B,B执行生命周期,B生成
9、B存到一级缓存,删除B的ObjectFactory对象
10、B注入到A,A执行生命周期,A生成
资料来源:https://www.yuque.com/yp000/osbag7/pqtbqz
标签:依赖,对象,Spring,ObjectFactory,System,循环,public,out From: https://www.cnblogs.com/sssjc/p/18564312