美文网首页
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