美文网首页Java编程语言爱好者Java服务器端编程
SpringBean单例情况下解决循环依赖的原理

SpringBean单例情况下解决循环依赖的原理

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2021-02-11 08:30 被阅读0次

    上一篇 <<<SpringBean的生命周期流程图
    下一篇 >>>Spring AOP的底层原理


    什么是SpringBean的循环依赖

    类A依赖于类B,类B也依赖于类A,这样就构成了循环依赖。

    简单解决办法:
    a、set方式明确注入对象
    b、将对象设置为单例对象

    为什么多例子无法解决Bean循环依赖

    因为多例无法判断依赖的是具体哪个bean。

    SpringBean单例情况下解决循环依赖的原理

    采用了三级缓存原理,一级缓存为完整对象,含有实例及初始化了方法,二级缓存和三级缓存都是婴儿对象,只是完成了实例化,未对方法进行初始化和增强。
    A、调用getSingleton方法,先从一级缓存中判断是否存在,不存在并且bean处于创建中,则从二级缓存中获取,如果二级也不存在,则从三级缓存中获取并设置到二级缓存中,移除三级缓存。
    B、如果以上对象均为空,则设置状态为创建中
    C、调用CreateBean的CreateBeanInstance实例化bean,此时为婴儿对象
    D、将婴儿对象加入到三级缓存中
    E、设置对象的属性信息,如果有依赖关系,则继续执行A-D的操作。
    F、当缓存中获取到依赖bean信息,则继续执行initializeBean进行init方法的初始化及增强操作
    G、完整对象获取后,移除当前bean在创建中的状态
    H、将完整对象存放到一级缓存中,移除二级和三级缓存信息。


    推荐阅读:
    <<<Spring IOC的初始化原理
    <<<SpringBean的生命周期流程图
    <<<Spring AOP的底层原理
    <<<Spring AOP通知责任链模式图解
    <<<Spring AOP核心源码解读
    <<<Spring事务常识汇总
    <<<Spring声明事务原理及核心源码分析
    <<<手动事务和自定义注解事务代码参考
    <<<Spring常用注解汇总

    相关文章

      网友评论

        本文标题:SpringBean单例情况下解决循环依赖的原理

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