Spring循环依赖


一、为什么要用三级缓存解决

1.不用一、二级缓存

方案:getBean时三级缓存和二级缓存做的事情合并,创建出代理类但没有填充属性的Bean
结论:多线程下,取到没有加载完成的Bean

2.不用二级缓存

方案:每次都用三级缓存创建代理对象
结论:B、C同时依赖A,但是通过动态代理创建出了两个不同的对象

3.不用三级缓存

方案:加入三级缓存里的逻辑直接变成 创建好代理对象后加入二级缓存
结论:最终结果是正确的,但是无论是否循环依赖了,都要在bean的初始化前调用后置处理器创建代理对象

4.三级缓存存普通对象,get的时候再产生代理

方案:就和描述一样
结论:创建代理本身就是getBean的一部分,如果这么做,会将创建bean和代理耦合起来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值