spring解决循环依赖

甄士隐
• 阅读 1512

springbean的循环依赖的解决

spring解决bean的循环依赖结合springbean的生命周期一起理解。
spring bean的生命周期getbean()

例子bean A依赖bean B,bean B依赖bean A。
一 先获取bean A
{
1.1 getBean A
1.2 doGetBean A
1.3 获取早期对象 getSingleton A,第一次没有A的早期对象。
1.4 createBean
1.5 doCreateBean{
1.5.1 创建bena实例
1.5.2 暴露早期对象,这个时候有A的早期对象了。
1.5.3 属性填充,这个时候会发现依赖了bean B,去getBean B,执行完getBeanB之后完成属性填充。
1.5.4 初始化bean A
}
返回A
}

二 getBean B
{
2.1 getBean B
2.2 doGetBean B
2.3 获取早期对象 getSingleton B,第一次获取B,还没有B的早期对象。
2.4 createBean B
2.5 doCreateBean B {
2.5.1 创建bean实例
2.5.2 暴露B的早期对象
2.5.3 属性填充,发现依赖了A,去getBean A,第二次获取A可以拿 到一个早期对象A。属性填充完毕,往下走。
2.5.4 初始化beanB
}
2.6 返回创建好的B
}

完成步骤一、步骤二 解决了循环依赖

不能解决循环依赖的场景

  1. 构造方法注入
    spring暴露早期对象是在实例化之后才暴露的,构造方法注入的方式会在实例化的时候就发现了依赖,但是这时候还没有早期对象。所以,构造方法注入造成的循环依赖不能被解决。
  2. bean多例模式
    多例模式都没有缓存,也不能被解决。
点赞
收藏
评论区
推荐文章
0源码基础学习Spring源码系列(二)——Spring如何解决循环依赖
本篇文章适用于0基础学习spring源码,文章重点解析spring如何解决循环依赖,并从解决循环依赖过程、三级缓存在循环依赖中的作用、解决代理对象的问题、二级缓存、初始化几个维度出发,解析spring源码。
Stella981 Stella981
3年前
Spring 源码分析之 bean 实例化原理
本次主要想写springbean的实例化相关的内容。创建springbean实例是springbean生命周期的第一阶段。bean的生命周期主要有如下几个步骤:<fontcolor'red'创建bean的实例</font给实例化出来的bean填充属性初始化bea通过IOC容器使用bean
Stella981 Stella981
3年前
Spring Bean生命周期
1\.简介在【Spring核心流程梳理】我们介绍了Spring容器的refresh过程,但是我们并没有进入到SpringBean的创建等生命周期等内容。这里,就来梳理一下SpringBean的生命周期。我们还是关注流程,重点关注核心的入口,忽略具体实现的细节。目标也很简单:1.知道SpringBean相关的扩展点
Easter79 Easter79
3年前
Spring是如何解决循环依赖的
​在某一次面试中,对方问了一个问题:Spring的Bean如果互相依赖,会发生什么?由于我那段时间正好遇到了一个Spring循环依赖报错的问题,就回答会报错。然后听对方口气,感觉自己答错了。于是事后了解了一下,才发现其实Spring自身解决了循环依赖的问题。​Spring的启动后,会读取配置文件,资源文件读取校验,创建BeanFacto
Easter79 Easter79
3年前
Spring核心流程梳理
1\.简介之前其实有写过SpringBean的生命周期:Spring容器Bean与生命周期(https://my.oschina.net/u/2474629/blog/3024794)。当时太过于关注细节的实现,而进入了Spring庞大的体系之中,对于还不太了解Spring的朋友不太友好,也不方便记忆。所以,这一次以应用为
Easter79 Easter79
3年前
Spring循环依赖问题的解决
循环依赖问题一个bean的创建分为如下步骤:!(https://static.oschina.net/uploads/img/202102/24030007_IrhH.png)当创建一个简单对象的时候,过程如下:先从单例池中获取bean,发现无a创建a的实例为a赋值把a放到单例池
Stella981 Stella981
3年前
Spring5.0源码深度解析之SpringBean循环依赖问题解决方案
!(https://gss1.bdstatic.com/vo3dSag_xI4khGkpoWK1HF6hhy/baike/w%3D268%3Bg%3D0/sign0c730b84bd19ebc4c078719fba1da8c1/37d12f2eb9389b503a80d4b38b35e5dde6116ed7.jpg)
Easter79 Easter79
3年前
Spring如何解决循环依赖的问题
        在关于Spring的面试中,我们经常会被问到一个问题,就是Spring是如何解决循环依赖的问题的。这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出个中奥秘。本文主要针对这个问题,从源码的角度对其实现原理进行讲解。1\.过程演示        关于Spring
从源码层面深度剖析Spring循环依赖 | 京东云技术团队
本文从源码层面介绍了Spring如何创建bean、如何解决循环依赖,同时也介绍了不能解决哪些循环依赖,同时在文章的最后解决循环依赖报错的几个方法
拓扑排序实现循环依赖判断 | 京东云技术团队
本文记录如何通过拓扑排序,实现循环依赖判断前言一般提到循环依赖,首先想到的就是Spring框架提供的Bean的循环依赖检测,相关文档可参考:https://blog.csdn.net/cristianoxm/article/details/11324610
bean的一生
你曾读spring源码“不知所云”、“绞尽脑汁”、“不知所措”嘛🤣🤣🤣那这篇文章可能会对你有所帮助,小编尝试用简单、易懂的例子来模拟spring经典代码👉SpringBean生命周期及扩展点,让你能够轻松的读懂SpringBean的生命周期,更加深
甄士隐
甄士隐
Lv1
要相信,会有那么一个人会一直很爱自己。
文章
4
粉丝
0
获赞
0