前两天晚上,正当我加班沉浸在敲代码的快乐中时,听到前桌的同事在嘀咕:Spring究竟是如何解决的循环依赖?

这让我想起最开始学Java的时候,掌握了一点基本语法和面向对象的一点皮毛。当时心里也是各种想法:

比如说面向切面是什么鬼?我面向我的对象还不够吗?

依赖注入是什么玩意儿?直接new一个不就行了吗......

现在再回过头看当时觉得有点不知天高地厚了。

因为Spring中的循环依赖非常重要,一方面是源码中为了解决循环依赖做了很多处理,另一方面是面试中一旦问到Spring中比较高阶的问题,循环依赖必定逃不掉。如果回答得好,那么这就是必杀技,反之就是被面试官反杀。

到现在,再面对Spring究竟是是如何解决循环依赖这个问题的时候,我已经可以明确的给出答案:Spring通过三级缓存解决了循环依赖,一级缓存为单例池、二级缓存为早期曝光对象、三级缓存为早期曝光对象工厂。

仅仅知道这个还不够,为了知道你掌握spring框架的程度,面试官还会追问:为什么要使用三级缓存来解决循环依赖问题呢?

这个简单的循环依赖问题,其实蕴含的是Spring 最核心的两个点:

  • 了解Bean的生命周期

  • 了解AOP原理

解决了这个疑问,才能够说是真正进入了Spring框架源码的世界。以小见大,在如今Spring生态系统如此庞大的情况下,要独自一人梳理好这些技术脉络并不容易。

因此这节彻底理解Spring两大特性的课程值得一听,仅需0.02元。直播时间7.16-7.17每晚20:00,时长4小时,带你彻底理解生命周期源码解析、循环依赖源码。扫码可直接购课:

通过本次课程,你将收获:

  • 正确理解Spring bean的生命周期,利用Spring提供的扩展点来完成特定需求。

  • 梳理对象之间错综复杂的依赖关系,学会处理因使用不当会引发的意想不到的问题。

  • 深入了解和运用Spring框架,高效阅读源码。

  • 掌握破解阿里、字节跳动跳动有关Spring面试真题的能力

本次集训的详细课程要点:

  • 狭义层面Bean的生命周期

  • 广义层面Bean的生命周期详解

  • 彻底理解Spring中的BeanPostProcessor

  • 彻底理解Spring中的BeanFactory

  • 彻底理解Spring中的BeanFactoryPostProcessor

  • 彻底理解Spring中解决循环依赖为什么要用三级缓存

程福利:

参与直播及技术问答即可参与抽奖,包邮获赠纸质书籍《深入理解JAVA虚拟机》

课程配套资料限时领取:

深入Spring两大特性和源码,从大厂真题解析中获取技术思路,还可参与直播互动答疑。

即刻购课,让代码变得更灵活、业务组件间更解耦,扫码领取Java人员的葵花宝典:

☟☟戳阅读原文也可直接购课~

想不到,三级缓存是这样解决循环依赖的……相关推荐

  1. 【Spring依赖循环】提前曝光,直接曝光到二级缓存已经可以解决循环依赖问题了,为什么一定要三级缓存?

    前言 问:什么是循环依赖? 循环依赖:说白是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用. 问:Spring 如何解决循环依赖? 答:Spring 通过提前曝光机 ...

  2. Spring三级缓存解决循环依赖

    1. 前言 循环依赖:就是N个类循环(嵌套)引用. 通俗的讲就是N个Bean互相引用对方,最终形成闭环.用一副经典的图示可以表示成这样(A.B.C都代表对象,虚线代表引用关系): 其实可以N=1,也就 ...

  3. Spring——三级缓存解决循环依赖详解

    三级缓存解决循环依赖详解 一.什么是三级缓存 二.三级缓存详解 Bean实例化前 属性赋值/注入前 初始化后 总结 三.怎么解决的循环依赖 四.不用三级缓存不行吗 五.总结 一.什么是三级缓存 就是在 ...

  4. Spring的三级缓存解决循环依赖

    一.什么是Spring三级缓存 第一级缓存:也叫单例池,存放已经经历了完整生命周期的Bean对象. 第二级缓存:存放早期暴露出来的Bean对象,实例化以后,就把对象放到这个Map中.(Bean可能只经 ...

  5. 手写Spring-第十六章-旋转吧雪月花!用三级缓存解决循环依赖

    前言 循环依赖,一直是一个令人头疼的问题.虽然我们一般情况下会尽量避免这种情况的发生,但很多时候它会在无意识的情况下出现.比如隔了好几个bean之后,发现循环起来了.那么什么是循环依赖呢?其实就是A依 ...

  6. 别盲从了,spring 解决循环依赖真的一定需要三级缓存吗?demo结合源码讲解三级缓存的真正目的,一级缓存singletonFactories的真正作用,看到文章最后让面试官眼前一亮

    背景 本篇是我上一篇<3分钟秒懂,最简单通俗易懂的spring bean 生命周期介绍与源码分析,附上demo完整源码>姊妹篇 spring 三级缓存问题是面试中的热点问题,大部分回答者会 ...

  7. Spring使用三级缓存解决循环依赖?终于完全弄明白了

    文章阅读前推荐 推荐先去看看源码,源码很短,但是对于我们在脑子里构建一个完整思路很重要.看起来非常简单,只需要双击shift,全局查找文件:AbstractAutowireCapableBeanFac ...

  8. Spring IOC 如何解决循环依赖?

    前言 假设对象A.B 之间相互依赖,Spring IOC是如何解决A.B两个对象的实例化的?答案是三级缓存. 三级缓存 SpringIOC 通过三级缓存来解决循环依赖问题,三级缓存指的是三个Map: ...

  9. Spring的getBean解决循环依赖

    Spring是如何解决循环依赖的? 通过三级缓存提前暴露对象解决的. 三级缓存存放了哪些对象信息? 一级缓存存放的是完整对象. 二级缓存存放的是那些属性还没赋值的对象. 三级缓存存放的是ObjectF ...

最新文章

  1. numpy中ravel函数、flatten函数的功能及差异
  2. 几十亿打水漂!世界最大移动通信展MWC因疫情33年来首次取消,多方损失惨重...
  3. a55 matlab排列组合_matlab常用的排列组合
  4. Elasticsearch在后台启动(Linux)
  5. sklearn综合示例8:SVM
  6. [MOSS开发]:通过简单BUG跟踪Demo阐述用户控件对列表的操作
  7. Gartner Q2服务器市场报告5大要点
  8. oracle 执行sql,Oracle动态执行SQL
  9. [转]使用xcode4 workspace 多个project协同工作
  10. [论文阅读] Deep Automatic Natural Image Matting
  11. hashMap 根据已有知识知道的
  12. 【java学习之路】(java SE篇)014.Stream API
  13. C#之SqlDependency数据库缓存
  14. Spring入门第六课
  15. 计算机实验云平台,浅析基于云平台的计算机实验教学中心建设
  16. 陆维家具设计拆单软件
  17. 计算机系统概论(原书第2版)部分课后习题答案(第三章)
  18. Win10 AMD平台无法开启SVM虚拟化
  19. PS怎么调整字体的行间距
  20. stm32——项目准备中keil、XCOM的安装与配置

热门文章

  1. 格力电器详解举报奥克斯 巨头互撕为哪般?
  2. 影院要求自费购买3D眼镜是“霸王条款” 官方都开始吐槽了!
  3. 工信部:不得利用“携号转网”实施恶性竞争行为
  4. 一改性冷淡风!红米Note 7 Pro包装盒曝光
  5. 第 1 章 多线程基础介绍
  6. 我的docker随笔7:docker容器与主机之间文件拷贝
  7. 我的内核学习笔记6:PCI驱动probe的一点认知
  8. java找出所有缺席人员,GitHub - uxzhen/Java: 假娃会迟到,但不会缺席!http://xuzhen.work:8080/getAll...
  9. resultset不支持循环遍历_二叉树的各种遍历方法的简单解释
  10. 【Flink】Flink 模拟 kafka 消费重启后 能接着读取 保存状态信息