100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Spring循环依赖的原理系列(四)--为什么用三级缓存 而不是二级

Spring循环依赖的原理系列(四)--为什么用三级缓存 而不是二级

时间:2023-04-17 15:19:44

相关推荐

Spring循环依赖的原理系列(四)--为什么用三级缓存 而不是二级

原文网址:Spring循环依赖的原理系列(四)--为什么用三级缓存,而不是二级_IT利刃出鞘的博客-CSDN博客

简介

说明

本文介绍Spring(SpringBoot)为什么使用三级缓存来解决循环依赖(为什么不使用二级)。

问题引出

在上边的分析中我们可以提出两个问题:

二级缓存好像没有用到?那么它什么时候会用到?为什么第三级缓存要用一个工厂,删除第三级缓存,只用第一二级不可以吗?

系列文章

Spring循环依赖的原理系列(一)--什么是循环依赖_IT利刃出鞘的博客-CSDN博客Spring循环依赖的原理系列(二)--打断点分析_IT利刃出鞘的博客-CSDN博客Spring循环依赖的原理系列(三)--原理概述_IT利刃出鞘的博客-CSDN博客Spring循环依赖的原理系列(四)--为什么用三级缓存,而不是二级_IT利刃出鞘的博客-CSDN博客

可以去掉第三级缓存吗?

不可以去掉第三级缓存。

浅层原因

Spring 的设计原则是在 IOC 结束之后再AOP(bean 实例化、属性设置、初始化之后再通过进行AOP(生成代理对象))。即:AOP的实现需要与bean的生命周期的创建分离。

为了解决循环依赖但又尽量不打破这个设计原则的情况下,使用了第三级缓存(key:bean名字,value:ObjectFactory)。它将一个函数式接口作为ObjectFactory,相当于延迟初始化。在AOP或者解决循环依赖时,通过调用Object的getObject()方法获取到第三级缓存中的对象。

如果去掉第三级缓存,将AOP的代理工作放到第二级缓存,这样的话,bean在创建过程中就先生成代理对象再初始化和其他工作,与Spring的AOP的设计原则相违背。

上边只是部分内容,为便于维护,本文已迁移到此地址:Spring循环依赖的原理(四)-为什么用三级缓存,而不是二级 - 自学精灵

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。