美文网首页spring
文字描述,三级缓存解决循环依赖

文字描述,三级缓存解决循环依赖

作者: 念䋛 | 来源:发表于2021-09-19 14:53 被阅读0次

    文字描述,三级缓存解决循环依赖
    A中包含属性B
    B中包含属性A
    名词介绍
    一级缓存
    二级缓存
    三级缓存
    正在创建集合
    A实例:完整A实例
    A空:只实例化,没有属性赋值
    A名称:只是字符串 A的beanName
    文字描述三级缓存如何避免循环依赖,A依赖B B依赖A

    1. 从一级缓存中获取A实例
    2. 不包含,正在创建集合也不存在A名称,将A名称put进正在创建集合中
    3. 利用无参构造函数,创建A空
    4. 判断A是否在正在创建集合,存在则将A空放到三级缓存中
    5. A空属性赋值
    6. 属性赋值时发现需要B,则从容器中获取
    7. 从一级缓存中获取B实例
    8. 不包含, 正在创建集合也不存在B名称,将B名称put进正在创建集合中
    9. 利用无参构造函数,创建B空
    10. 判断B是否在正在创建集合,存在则将B空放到三级缓存中
    11. B空属性赋值
    12. 属性赋值时发现需要A,这时就发生了循环依赖,这里也发现,如果没有循环依赖,二级缓存是用不到的
    13. 一级缓存中是否包含A实例,不包含
    14. 正在创建集合包含A名称,从二级缓存中获取A空,不存在
    15. 从三级缓存中获取A空,可以获取到,将A空存放进二级缓存中,并将A空从三级缓存中删除
    16. 将A空返回至11步骤
    17. B赋值结束,此时B实例存放在二级缓存中
    18. 从二级缓存中获取B实例
    19. 从正在创建结合中,删除B名称
    20. 将B实例从二级缓存中删除,并B实例put进一级缓存中
    21. 此时一级缓存中有B,二级缓存中A空, 并且B中的属性A指向二级缓存中的A空
    22. 返回步骤5
    23. A空赋值属性B,由A空变为A实例,此时A实例再二级缓存中,A实例中的属性B指向一级缓存中的B实例
    24. 从正在创建结合中,删除A名称
    25. 将A实例从二级缓存中删除,并A实例put进一级缓存中
    26. 此时一级缓存A实例B实例 属性互相指向

    相关文章

      网友评论

        本文标题:文字描述,三级缓存解决循环依赖

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