二、什么是循环依赖
循环依赖直白点就是发生在两个类,你引用我,我引用你
的状态,如图:
三、如果不依赖于Spring自己解决循环依赖如何解决
以上图为例,假设,我们能够创建完成AService
之后,放置到到一个缓存中,再去注入属性!每次注入属性的时候,所需要的属性值都从缓存中获取一遍,缓存中没有再去创建不就解决了?如图所示:
总结一下上面的流程:
AService
创建完成后将自己加入到二级缓存,然后开始注入属性- 发现
AService
依赖BService
于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建BService
- 缓存中没有,开始实例化
BService
,然后注入内部属性! - 注入内部属性时发现依赖
AService
,于是先查询一级缓存是否有数据一级缓存没有就查询二级缓存,有就返回,没有就创建,很显然,二级缓存是有数据的。于是从二级缓存取出AService
注入到BService
。 BService
创建完成后将自己从二级缓存挪到一级缓存,并返回。AService
获取到BService
后,注入到自己的属性中并把自己从二级缓存挪的一级缓存,返回AService
!- 至此,循环依赖创建完成!
那么有了上面的思路,我们如何用代码实现一遍我们的逻辑呢?
资料分享
这是我从某优质机构弄来的一些资料,内容我认为确实称得上优质二字,如需领取,请点赞这篇文章,关注我然后点击这里即可免费领取
首先分享一份学习大纲,内容较多,涵盖了互联网行业所有的流行以及核心技术,以截图形式分享:
(亿级流量性能调优实战+一线大厂分布式实战+架构师筑基必备技能+设计思想开源框架解读+性能直线提升架构技术+高效存储让项目性能起飞+分布式扩展到微服务架构…实在是太多了)
其次分享一些技术知识,以截图形式分享一部分:
Tomcat架构解析:
算法训练+高分宝典:
Spring Cloud+Docker微服务实战:
最后分享一波面试资料:
切莫死记硬背,小心面试官直接让你出门右拐
1000道互联网Java面试题:
Java高级架构面试知识整理:
Java高级架构面试知识整理:
[外链图片转存中…(img-hSpiWIXU-1627459554488)]