Spring为什么使用三级缓存不使用二级缓存

缓存解决循环依赖的思路有两种:

第一种:不管有没有循环依赖,都提前创建好代理对象,并将代理对象放入缓存。出现循环依赖时,其它对象直接就可以取到代理对象并注入,两个级别的缓存就够了。

第二种:不提前创建好代理对象,在出现循环依赖被其它对象注入时,才实时生成代理对象。

Spring选择了后一种,如果使用两个缓存解决循环依赖,意味着Bean在构造完成后就创建代理对象,这样就违背了Spring的设计原则。Spring结合AOP和Bean的生命周期,是在Bean创建完成之后通过AnnotationAwareAspectJAutoProxyCreator这个后置处理器来完成的,在这个后置处理器的postProcessAfterInitialization方法中对初始化后的Bean完成AOP代理。使用第一种方案如果出现了循环依赖,那没有办法,只有先给Bean先创建代理,但是在Spring设计之初就是让Bean在生命周期的最后一步完成代理而不是在实例化之后就立马完成代理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值