spring 生命周期及——循环引用问题解决
2021-09-23 本文已影响0人
虾米咬小米
一、spring 生命周期
bean的生命周期把它总结为以下几个阶段
- 实例化
- 属性注入/依赖注入
- 初始化
- 销毁
其中实例化、属性注入、初始化属于bean创建的过程。
bean创建的过程流程图
image.png二 spring 循环引用问题解决
所以要避免构造函数注入,可以使用 setter 注入替代。
这里有 A、B、C 三个类,可以看到发生了循环依赖:
image.png
Spring 使用三级缓存来解决循环依赖的问题,三级缓存分别是:
- singletonObjects: 一级缓存,存储单例对象,Bean 已经实例化,初始化完成。
- earlySingletonObjects: 二级缓存,存储 singletonObject,这个 Bean 实例化了,还没有初始化。
- singletonFactories: 三级缓存,存储 singletonFactory。
本文也通过 Debug 来验证了使用三级缓存解决依赖的过程。
image.png参考: