真没想到,三级缓存是这样解决循环依赖问题的

Java3y

共 1170字,需浏览 3分钟

 ·

2020-07-13 20:10

最近很多水友在后台留言问:Spring的循环依赖问题,这也是最近两年新出的面试频度较高的面试题!
下面我们就通过这篇文章让大家了解循环依赖的问题
什么是循环依赖?循环依赖其实是指两个及以上bean相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例bean),简单说就是A依赖B,B依赖C,C又依赖A。


b12fd7bc963defc63142aa958db69ad5.webp


其实在Spring中,有两种循环依赖的场景...
  • 第一种:构造器的循环依赖
  • 第二种:setter的依赖注入
第一种是没有办法解决的,而第二种可以使用提前暴露对象的方式进行解决
那么肯定有很多小伙伴会有疑问,为什么?其实想搞明白这个问题,需要对Spring的Bean的生命周期有一个完整的了解,如下图:

e0383fe68edf128500d4e73c13a87a3c.webp


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

2ee30ccb704239733b3dd9b27b2dbf3d.webp


上图就是Spring中的三级缓存,那么问题来了
  • Spring是如何通过三级缓存来解决问题的?
  • 一级缓存能不能解决?为什么?
  • 二级缓存能不能解决?为什么?
  • 为什么非要使用三级缓存?使用三级缓存是为了解决什么问题?
题外话:这些问题是为什么呢?来往下看

1ccf66796c46a4d2aa490cdf955d7926.webp

最近小编在跟马士兵老师聊天过程中,得知要开一个大厂必备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面试题


主讲老师?

2a6f4c0b50901ea298347b5778f4eb8d.webp


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


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


00fd166822febcde04f130fa2cef186d.webp

如何领取?

扫码加小助手,获取直播地址,另送架构师成长路线图

浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报