spring的循环依赖、三级缓存

spring的循环依赖、三级缓存


二级缓存可处理循环依赖、三级缓存处理代理
1、A、B两个类 ,循环依赖,无代理
A在创建时,将早期工厂放在三级缓存,并生成一个早期BeanA,在属性注入时发现需要B,此时去生成B
B通过三级缓存的早期工厂创建早期BeanB,注入属性是发现需要A,此时获取早期BeanA,并完成B的初始化
A在B初始化后,完成创建。
2、A、B两个类 ,循环依赖,有代理
A在创建时,将早期工厂放在三级缓存,并生成一个早期BeanA(代理),在属性注入时发现需要B,此时去生成B
B通过三级缓存的早期工厂创建早期BeanB,注入属性是发现需要A,此时获取早期BeanA(代理),并完成B的初始化
A在B初始化后,完成创建

二级缓存能够解决循环依赖。但是当存在代理时,如果只有二级缓存,由于每次向外部都需要提供同一个代理,
要么,使用二级缓存存储代理对象,三级缓存存工厂
要么,直接使用二级缓存存储代理对象,不要工厂。

注意:
1、除去代理的情况,如果A、C也存在循环依赖,那么C在获取A时,该A需要和B获取到的A相同,所以直接从二级缓存拿即可。
2、正常来讲,bean的代理是在属性注入后,如果存在循环依赖,该代理过程会提前。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值