spring是如何解决循环依赖的【白话版】

场景一:成员变量引入即A依赖B,B依赖A
1. 在finishBeanFactoryInitialization中,开始初始化A,毋庸置疑通过反射
2. 之后【非完美对象】开始设置属性字段,此时发现需要一个B的对象。同时已标记A处于正在初始化阶段
3. 显然接下来,开始去初始化B的对象,同样的手法,到设置属性阶段,发现需要A对象
4. 于是乎,spring又开始去初始化对象A的依赖,此时先从缓存singletonObjects去取,没有再去看是否正处于初始阶段,是则再从缓存earlySingletonObjects中取,再没有,则看是否存在allowEarlyReference,是则从singletonFactories中取
5. 将早期对象A设置到B中,再把B设置到A中

猜你喜欢

转载自blog.csdn.net/dh798417147/article/details/80373697