最近很多水友在后台留言问:

Spring的循环依赖问题,这也是最近两年新出的面试频度较高的面试题!

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

什么是循环依赖?

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

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

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

  • 第二种:setter的依赖注入

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

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

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

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

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

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

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

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

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

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

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

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

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

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

如何参加?

本活动仅限199人

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

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

专属福利,仅限今天!!!

内容大纲如何?

第一天:

  • 如何利用反射实现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面试题

本活动仅限199人

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

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

专属福利,仅限今天!!!

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

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

本活动仅限199人

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

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

专属福利,仅限今天!!!

没想到,他面试竟然挂在了Spring的这个点上...相关推荐

  1. 万万没想到!!! 谷歌面试原来也问ArrayList

    不花时间的导读:这是<好好面试系列>第27篇原创文,该系列主要分享小饭饭面试别人.和被别人面试的经历,该篇文章主要分享ArrayList高频面试题,有兴趣的看看,已经知道的可以无视. 前几 ...

  2. 人民的名义 | 没想到大结局竟然是这个?一定要看到最后!

    你说现在谁最红? 当然是来自汉东的老鲜肉了! 瞧沙书记打篮球时的高大身影 看育良书记的蜜汁微笑 体会祁厅长眉眼间的冷酷帅气 当然,怎么能忘记 一心向着GDP的.com书记-的欧式双眼皮?! 好了,言归 ...

  3. 没想到 Shell 命令竟然还能这么玩?| Shell 玩转大数据分析

    点击上方蓝色字体,关注我 -- 一个在阿里云打工的清华学渣! 关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.公众号后台回复关键字 &q ...

  4. 万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题.....

    1.类加载过程 类加载时机 「加载」 将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据 ...

  5. 没想到国美竟然用oracle的团队来搭建电商平台

    最近接触到几个国美的人,得知国美将重温阿里当年开发路:采用oracle的电商实施团队进行平台的搭建.所有开发人员将学习oracle的开发工具进行二次开发.虽然没接触过oracle的电商研发团队,我想无 ...

  6. 万万没想到,“红孩儿”竟然做了程序员,还是 CTO!

    作者 | 年素清 来源 | 码农故事汇(ID:sunianqingshi) 说起老版<西游记>,大家肯定都不陌生,毕竟这是90后一代人的童年回忆.相信大家一定还记得里面的红孩儿,那个嚣张跋 ...

  7. python这个软件学会能做什么工作-万万没想到,学会Python即使不做程序员都能月入过万!...

    昨天,我公司面试了1个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待7000,我直接给他开了 ...

  8. 不从事编程、学python有用吗-没想到,学会Python即使不做程序员都能月入过万!...

    昨天,我公司面试了1个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待7000,我直接给他开了 ...

  9. python兼职程序员工资-没想到,学会Python即使不做程序员都能月入过万!

    昨天,我公司面试了 1 个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会 Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待 7000,我直接 ...

最新文章

  1. 矩阵的三角分解(LU)法(高斯消去法的矩阵形式分析)
  2. php gtk中文介绍,PHP-GTK介绍及其应用_PHP教程
  3. 使用vue 刷新页面后state数据被清空的问题(刷新总是跳转到登陆页面)
  4. 台式计算机技术方案,2017年4月自考02316计算机应用技术真题及答案
  5. arm11搭建Linux平台,armlinux软硬件平台搭建.doc
  6. HDU 2340 - Obfuscation(dp)
  7. 面试技巧,如何通过索引说数据库优化能力
  8. Gradle与Gradle插件
  9. Linux下互斥量加锁与解锁操作的C代码实现
  10. 老公分不到股份?问题根源是创业者人才观缺失
  11. sap批量创建盘点凭证以及盘点凭证过账
  12. 语义分割-FCNs in the wild: Pixel-level adversarial and constraint-based adaptation 对抗方法实现不同数据集语义分割
  13. 学习笔记(5.7~5.10)——深度学习之回归(梯度下降法Gradient Descent)
  14. web2.0创业时代将终结
  15. 如何计算芯片的ESP mac 地址
  16. Flutter安装时你一定会碰到的问题
  17. 小米雷军现身国庆 70 周年花车!
  18. docker logs查看日志
  19. 2021青岛十九中高考成绩查询,@青岛高考生 2020新高考模拟考可以查成绩了
  20. 备考CSP刷题经验总结

热门文章

  1. JavaScript初学者编程题(8)
  2. 五年一贯制专转本c语言真题,江苏省五年一贯制专转本《C语言程序设计》模拟试卷二(晓庄)...
  3. HDU4635(强连通分量+Kosaraju算法)
  4. [CQOI2009]中位数图 详细题解
  5. python常用包下载_Python及其常用模块库下载及安装
  6. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解
  7. @RequestBody映射
  8. 9.65 最长上升子序列
  9. 手写堆模板(指针数组)
  10. 入门级Mat (java版)