spring 三级缓存与循环依赖

文章详细阐述了Spring框架通过三级缓存机制解决循环依赖的过程,包括一级缓存存储已初始化对象,二级缓存保存未初始化对象,而三级缓存用于创建需要加工的对象。在初始化过程中,Spring会检查缓存、创建实例、设置属性并管理依赖关系,最终完成对象的完整构建。
摘要由CSDN通过智能技术生成

什么时循环依赖

 简单来说就是两个或多个对象相互依赖,如上图当初始化对象Menu时需要MenuResource对象当初始化MenuResource对象时需要Menu对象。

spring如何解决循环依赖

 spring使用三级缓存解决循环依赖

  • 一级缓存:缓存那些已经初始化好的对象。
  • 二级缓存:缓存那些没有初始化好的对象(例如:需要依赖其他对象的对象)
  • 三级缓存:value是一个ObjectFactory工厂接口 通过getObject方法创建那些需要加工的对象(例如需要创建为代理对象)


循环依赖的初始化过程

 第一步:查看缓存中是否有MenuReource对象

第二步:获取MenuReource的Class对象


第三步:通过调用ObjectFactory的getObject方法的实现创建MenuReource对象

 第四步:通过反射创建MenuReource实例Bean

 第五步:将实例bean放入三级缓存

 第六步:设置实例bean的属性

 第七步:从缓存中获取 MenuReource依赖的对象menu发现不存在 创建menu对象(过程和MenuReource一样不再赘述)

 第八步:将创建好的menu实例对象也放入三级缓存


第九步:发现menu对象依赖menuResource(发现三级缓存中存在menuResource对象)

 第十步:menu对象创建完成并放入一级缓存

 第十一步:返回之前为menuResource设置menu属性的位置继续执行从缓存中获取到menu对象设置到menuResource对象中并将menuResource实例对象放入一级缓存 整个流程结束。

 总结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值