最近很多水友在后台留言问关于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》,干货满满,只能帮到你这里了,快去一起学习吧...

现在扫码立即免费报名

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

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

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

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

如何参加?

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

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

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

为什么阿里那么难进,原来精髓在这相关推荐

  1. Kafka、Flink 数据中台实践:事件模型、调度、实时/离线数仓架构之道

    去年年底,网传阿里董事局主席张勇,在阿里内网发帖称"现在阿里的业务发展太慢,要把中台变薄,变得敏捷和快速."此言一出激起千层浪,难道中台概念真成也阿里败也阿里? 有人戏称阿里&qu ...

  2. 硅谷文化,逆生长在西湖?

    今天的科技产业,其实有这么一个宏观趋势:中国正在失去学习目标. 从前沿科技的应用,业务问题的变化,甚至到科技公司的文化上,美国都不再保持着对中国的同轨且领先.换句话说,后面的路要靠自己摸索. 尤其是在 ...

  3. 全是精髓!也许是最完美的“Nginx学习笔记”了,阿里云高工“365”天手写!

    前言 "Nginx",一个高性能的HTTP和反向代理web服务器,Nginx因为内存少.并发能力强的特性,深受虚拟机主机提供商的欢迎,可以支持高达50000个并发连接数的响应.Ng ...

  4. 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,基于数据库Greenplum的开源版本,并且吸收PostgreSQL精髓...

    为什么会有HybridDB的诞生?它经历了怎样的研发历程?它的应用场景和情况是怎样的?带着这些问题,InfoQ对阿里云的数据库专家兼Postgres中国社区/中国用户会主席萧少聪先生进行了采访,以下文 ...

  5. 7天拿到阿里Android岗位offer,都是精髓!

    食用指南 和大部分人一样,我在复习完第一遍Android知识的情况下,看到相关的知识回答的仍然不能够令自己满意. 在第二遍系统复习的时候,我着重记住每个知识点的关键字,根据这些关键字拼凑出大概的知识点 ...

  6. 慕了!17年阿里Java开发大佬把Spring Boot的精髓都总结出来了

    目前ssm框架还是比较常用的,其中的ss指的无非就是Spring 和 SpringMVC,我们可以简单地认为 "Spring Boot ≥ Spring + SpringMVC", ...

  7. 阿里开发手册精髓知识点总结

    Mysql篇================ 小数类型为decimal,禁止使用float和double. 说明:在存储的时候,float和double都存在精度损失的问题,很可能在比较值的时候,得到 ...

  8. 在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?

    编者按 \\ 在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Business Intelligence)之上.BI具有着明确的分析需求,清晰地知道需要处理哪些信息,并且如何最终获得多维度 ...

  9. 阿里三面让我现场改造Spring框架,明天带他去爬山!

    作为一个Java程序员,提到开源框架,Spring无疑是绕不过去的门槛,相信大家对它都不陌生,或多或少都用过. 但是如果谈到改造Spring框架,实现它的自定义扩展,以及大厂面试必问的源码,很多人就会 ...

最新文章

  1. Blender三维建模和动画风格化的东方场景视频教程
  2. python encodings模块_ImportError:没有名为'encodings'的模块
  3. linux libffi 简介 高级语言互调库
  4. 实例方法-扩展器-生命zhou
  5. 9 C++ Boost 多线程,线程同步
  6. windows开启ping功能
  7. jdk5.0的新特性
  8. idea引不进jdk的包_idea install 时提示jdk的某个jar包的包不存在的问题
  9. Verilog学习之异步复位的串联T触发器设计
  10. 染色法判定二分图的算法
  11. 用Python实现温度转换程序
  12. PAT/PTA甲级2020春季题目【满分】弃坑贴
  13. Html之 图像标记
  14. 1688搜索店铺列表 API
  15. 资深电竞发烧友走心盘点,五款高续航游戏低延迟蓝牙耳机分享
  16. 全球与中国智能监控摄像头市场现状及未来发展趋势
  17. 【RTSCon 2022】实时通信与价值赋能
  18. 《攻防世界》forgot栈空间题
  19. 干货:Hulu教你赴美工作怎么拿签证!
  20. Linux IP in IP隧道简述

热门文章

  1. 宏源药业上市破发:跌幅16% 公司市值168亿超募17亿
  2. 我把电脑系统升级成Windows11,体验了一下还是换回Windows10
  3. 如何在linux下解压缩rar和zip格式的文件压缩包
  4. bluedroid acl 发送和接受
  5. Docker容器化开发流程(一)介绍
  6. c语言打印字母金字塔图形,C程序打印金字塔和图案
  7. win10千万不要重置_Win10系统如何自动恢复到出厂设置,小白式操作教程
  8. JavaDay29 CSS
  9. java文件打包jar文件_如何把JAVA文件打包成jar文件
  10. 一图看清《基督山伯爵》人物关系