[转]Java中的循环依赖和三级缓存,你听过吗?

最近很多水友在后台留言问关于 Spring的循环依赖问题, 这也是最近两年新出的面试频度较高的面试题!

下面我们就通过这篇文章让大家了解循环依赖的问题

什么是循环依赖?

循环依赖其实是指两个及以上bean相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例bean),简单说就是A依赖B,B依赖C,C又依赖A。

[转]Java中的循环依赖和三级缓存,你听过吗?

其实在Spring中,有两种循环依赖的场景…

  • 第一种: 构造器的循环依赖

  • 第二种: setter的依赖注入

第一种是没有办法解决的,而第二种可以使用提前暴露对象的方式进行解决

那么肯定有很多小伙伴会有疑问,为什么?

其实想搞明白这个问题,需要对Spring的Bean的生命周期有一个完整的了解,如下图:

[转]Java中的循环依赖和三级缓存,你听过吗?

大家可能对这个图不太熟悉,但是我要强调的是,图中我已经用三种颜色标识了,除了使用这部分之外,可以分为实例化和初始化,这也是解决问题的核心。

同时,Spring中还使用了三级缓存来解决问题:

[转]Java中的循环依赖和三级缓存,你听过吗?

上图就是Spring中的三级缓存,那么问题来了

  • Spring是如何通过三级缓存来解决问题的?

  • 一级缓存能不能解决?为什么?

  • 二级缓存能不能解决?为什么?

  • 为什么非要使用三级缓存?使用三级缓存是为了解决什么问题?

[转]Java中的循环依赖和三级缓存,你听过吗?

为了弄懂这个问题,我在微信上跟 马士兵老师 聊了很久,恍然大悟!

这里面知识点很多,以后有机会要专门写一篇,如果你等不及,可以先去参加一下马老师的 大厂必备Spring 训练营

时间:7月16日-7月17日 两天,晚20:00开始

我为大家申请到了公众号专属福利, 这两天的直播,大家可以免费报名! 诚意够不够?

如何参加?

[转]Java中的循环依赖和三级缓存,你听过吗?

扫码加小助手,获取直播地址

报名即送架构师成长路线图

专属福利,名额有限,先到先得

课程大纲

第一天:

  • 如何利用反射实现Autowired注解

  • 一招教你如何手撕SpringIOC源码

  • Spring程序是如何启动的?

  • Spring是如何加载配置文件到应用程序的?

  • 掌握核心接口BeanDefinitionReader

  • 掌握核心接口BeanFactory

  • 彻底搞懂Spring的refresh方法

  • BeanPostProcessor接口的作用及实现

  • BeanFactoryPostProcessor接口的作用及实现

第二天:

  • Spring Bean有没有必要实现Aware接口

  • Spring Bean的实例化过程大揭密

  • Spring Bean的初始化到底干了什么

  • 彻底理解FactoryBean接口

  • 完美解析Spring Bean的生命周期

  • Spring的Environment接口有什么作用?

  • 为什么产生循环依赖问题

  • 循环依赖在Spring中是如何解决的

  • 如何巧妙回答Spring IOC面试题

连续两天 (7月16日-7月17日) 每天2小时(20:00-22:00),免费听 大厂必备Spring ,干货满满,只能帮到你这里了,快去一起学习吧…

现在扫码立即 免费报名

[转]Java中的循环依赖和三级缓存,你听过吗?

扫码加小助手,获取直播地址

报名即送架构师成长路线图

专属福利,名额有限,先到先得

另外准备一份干货满满的学习资料,送给大家,抓紧领取…

[转]Java中的循环依赖和三级缓存,你听过吗?

如何参加?

[转]Java中的循环依赖和三级缓存,你听过吗?

扫码加小助手,获取直播地址

报名即送架构师成长路线图

专属福利,名额有限,先到先得

原文 

https://blog.csdn.net/singwhatiwanna/article/details/107328566

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » [转]Java中的循环依赖和三级缓存,你听过吗?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址