美文网首页
spring 生命周期及——循环引用问题解决

spring 生命周期及——循环引用问题解决

作者: 虾米咬小米 | 来源:发表于2021-09-23 18:11 被阅读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

参考:

Spring 是如何解决循环依赖的?

Spring源码分析-bean创建(流程图)

相关文章

网友评论

      本文标题:spring 生命周期及——循环引用问题解决

      本文链接:https://www.haomeiwen.com/subject/wguogltx.html