spring循环依赖和三级缓存

三级缓存里面的内容

  • 一级缓存,保存的依赖完成的对象
  • 二级缓存,保持的依赖不完整的对象
  • 三级缓存,保持的对象工厂

循环依赖对象是怎么放入三级缓存中的

  1. 加载A

    • 在三级缓存中加入ObjectFactory<A>
    • 发现需要依赖B,然后开始加载B
  2. 加载B

    • 在三级缓存中加入ObjectFactory<B>
    • 发现需要依赖A,在一级缓存中没有,二级缓存中没有,三级缓存中有
  3. 处理B的依赖A

    • 发现B需要注入A,此时:
    • ObjectFactory<A>并调用getObject():得到半成品的A,放入二级缓存中
    • 将半成品的A放入二级缓存,并从三级缓存中移除ObjectFactory<A>
  4. 完成B的初始化

    • 将A的引用给B,B完成初始化,将完全初始化的B放入一级缓存
  5. 完成A的初始化

    • 将B的引用给A,A完成初始化,将完全初始化的A放入一级缓存

posted on 2025-10-15 16:23  zhangyukun  阅读(3)  评论(0)    收藏  举报

导航