【面经】讲下spring bean的三级缓存与循环依赖问题

spring bean的三级缓存

单例对象缓存singletonObjects:Spring的第一级缓存,用于存储完成实例化、属性注入、初始化的单例bean

早期单例对象缓存earlySingletonObjects:Spring的第二级缓存,用于存储完成实例化,未做属性注入和初始化的的单例bean

单例工厂缓存singletonFactories:Spring的第三缓存,存储的是完成实例化、未完成属性注入、初始化的bean的工厂

Spring Bean的三级缓存与解决循环依赖之间的关系

三级缓存是为了解决循环依赖问题而设计的。
在Spring容器中,当两个Bean之间存在循环依赖时,Spring会使用三级缓存来存储其中一个Bean,以便在另一个Bean需要时进行延迟加载。

具体来说,当Spring容器初始化Bean时,如果检测到循环依赖,Spring会将其中一个Bean存储在三级缓存中,而不是立即实例化和配置该Bean。当另一个Bean需要该Bean时,Spring会从三级缓存中获取该Bean的实例,并对其进行配置和初始化。
这样可以解决循环依赖问题,避免出现无限递归的情况。

需要注意的是,只有单例的Bean才会被存储在三级缓存中。
非单例的Bean每次从容器中获取都是一个新的对象,不会存储在缓存中。

因此,三级缓存是Spring解决循环依赖问题的一种机制,通过缓存和延迟加载的方式避免了循环依赖导致的无限递归问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkPet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值