我是靠谱客的博主 勤奋钥匙,最近开发中收集的这篇文章主要介绍Spring中是否必须使用三级缓存才能解决循环依赖,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

​????个人主页:热爱生活的李????
​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️
????本人也在学习阶段,如若发现问题,请告知,非常感谢????

个人理解,个人理解,个人理解
可能有错,可能有错,可能有错
错了勿喷,错了勿喷,错了勿喷

在这里插入图片描述
在这里插入图片描述

????一级缓存

一级缓存: 保存成品

当创建service1时,需要service2,然后创建service2,service2里面有service1,然后创建service1 …

不能解决循坏依赖

????二级缓存(1)

一级缓存:保存成品
二级缓存:保存半成品(保存代理对象)
判断缓存是否存在都是先从一级缓存找再查二级缓存
递归进行参数注入的所有可以注入成功

没有AOP

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

然后service1在一级缓存中找到了service2中找到了那么就可以创建成功service1

在这里插入图片描述

存在AOP

假如service1存在AOP
那么一级缓存中的service2里面的service1就是原始的service1而不是代理service1所有出错

????二级缓存(2)

一级缓存:保存成品
二级缓存:保存半成品(保存代理对象+原始Bean)
流程与上面是一样的,使用Spring中的三级缓存演示

打断点(快速到service1或者service2)

beanName.equals(“service1”) || beanName.equals(“service2”)

在这里插入图片描述

现在二级与三级缓存都没有

在这里插入图片描述

执行完发现三级缓存有而二级缓存没有
但是我们是为了演示二级缓存,所有使用评估表达式
保存到二级缓存成功
在这里插入图片描述

在这里插入图片描述
同理将service2保存进二级缓存

在这里插入图片描述
service2直接成功
在这里插入图片描述

所有这种二级缓存是可以解决循环依赖的
但是这种情况了不知道这个代理类是不是存在循坏依赖,所以只要是被代理那么都要初始化前创建代理类
Spring中的规则是 创建代理类是在Bean初始化后,而这是在初始化前

????三级缓存

一级缓存:保存成品
二级缓存:保存半成品
三级缓存:保存BeanFactory

流程看三级缓存

相对于二级缓存
就是如果是没有循坏依赖的aop那么就会在初始化后创建代理对象而存在aop那么也会提前创建代理对象

最后

以上就是勤奋钥匙为你收集整理的Spring中是否必须使用三级缓存才能解决循环依赖的全部内容,希望文章能够帮你解决Spring中是否必须使用三级缓存才能解决循环依赖所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部