最近很多水友在后台留言问关于 Spring的循环依赖问题, 这也是最近两年新出的面试频度较高的面试题!
下面我们就通过这篇文章让大家了解循环依赖的问题
循环依赖其实是指两个及以上bean相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例bean),简单说就是A依赖B,B依赖C,C又依赖A。
其实在Spring中,有两种循环依赖的场景...
第一种: 构造器的循环依赖
第二种: setter的依赖注入
第一种是没有办法解决的,而第二种可以使用提前暴露对象的方式进行解决
那么肯定有很多小伙伴会有疑问,为什么?
其实想搞明白这个问题,需要对Spring的Bean的生命周期有一个完整的了解,如下图:
大家可能对这个图不太熟悉,但是我要强调的是,图中我已经用三种颜色标识了,除了使用这部分之外,可以分为实例化和初始化,这也是解决问题的核心。
同时,Spring中还使用了三级缓存来解决问题:
上图就是Spring中的三级缓存,那么问题来了
Spring是如何通过三级缓存来解决问题的?
一级缓存能不能解决?为什么?
二级缓存能不能解决?为什么?
为什么非要使用三级缓存?使用三级缓存是为了解决什么问题?
为了弄懂这个问题,我在微信上跟 马士兵老师 聊了很久,恍然大悟!
这里面知识点很多,以后有机会要专门写一篇,如果你等不及,可以先去参加一下马老师的 《 大厂必备Spring 》 训练营
时间:7月16日-7月17日 两天,晚20:00开始
我为大家申请到了公众号专属福利, 这两天的直播,大家可以免费报名! 诚意够不够?
如何参加?
扫码加小助手,获取直播地址
报名即送架构师成长路线图
专属福利,名额有限,先到先得
如何利用反射实现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 》 ,干货满满,只能帮到你这里了,快去一起学习吧...
现在扫码立即 免费报名
扫码加小助手,获取直播地址
报名即送架构师成长路线图
专属福利,名额有限,先到先得
另外准备一份干货满满的学习资料,送给大家,抓紧领取...
如何参加?
扫码加小助手,获取直播地址
报名即送架构师成长路线图
专属福利,名额有限,先到先得