关注
Spring如何解决循环依赖
spring中循环依赖有三种情况:
1、构造器注入形成的循环依赖。也就是beanB需要在beanA的构造函数中完成初始化,beanA也需要在beanB的构造函数中完成舒适化,这种情况的结果就是两个bean都不能完成初始化,循环依赖难以解决。
2、setter注入构成的循环依赖。beanA需要在beanB的setter方法中完成初始化,beanB也需要在beanA的setter方法中完成初始化,spring设计的机制主要就是解决这种循环依赖,也是今天下文讨论的重点。
3、prototype作用域bean的循环依赖。这种循环依赖同样无法解决,因为spring不会缓存‘prototype’作用域的bean,而spring中循环依赖的解决正是通过缓存来实现的。
下面主要说明第二种情况中循环依赖的解决方案
步骤一:beanA进行初始化,并且将自己进行初始化的状态记录下来,并提前向外暴露一个单例工程方法,从而使其他bean能引用到该bean(可能读完这一句,您仍然心存疑惑,没关系,继续往下读)
步骤二:beanA中有beanB的依赖,于是开始初始化beanB。
步骤三:初始化beanB的过程中又发现beanB依赖了beanA,于是又进行beanA的初始化,这时发现beanA已经在进行初始化了,程序发现了存在的循环依赖,然后通过步骤一中暴露的单例工程方法拿到beanA的引用(注意,此时的beanA只是完成了构造函数的注入但为完成其他步骤),从而beanB拿到beanA的引用,完成注入,完成了初始化,如此beanB的引用也就可以被beanA拿到,从而beanA也就完成了初始化。
spring进行bean的加载的时候,首先进行bean的初始化(调用构造函数),然后进行属性填充。在这两步中间,spring对bean进行了一次状态的记录,也就是说spring会把指向只完成了构造函数初始化的bean的引用通过一个变量记录下来,明白这一点对之后的源码理解至关重要。
https://www.cnblogs.com/myseries/p/11801097.html
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
- 1... 得物暑期实习oc1.8W
- 2... 以Mentor视角,更喜欢有这些沟通技巧的实习生1.3W
- 3... 悟已往之不谏,知来者之可追9143
- 4... 来算一算你的offer究竟到手工资多少!(详细教程)7710
- 5... 【26届四段大厂】实习爆炸产出方法论 2.06151
- 6... 腾讯云智一面面经5823
- 7... 双非本秋招字节转正失败春招重新拿下字节和腾讯5643
- 8... 💗 521凉面筋真好吃~记录一把本小女孩人生第一面4700
- 9... 暑期实习后,如何完成学生到职场人的身份转换?4344
- 10... 28届现在真的找不到日常吗?4335
正在热议
更多
# 毕业季,给职场新人一些建议 #
27196次浏览 458人参与
# 你的房租占工资的比例是多少? #
23117次浏览 255人参与
# 我的求职总结 #
30167次浏览 502人参与
# 计算机专业还有必要去大厂卷吗 #
20674次浏览 109人参与
# 我的实习日记 #
2445176次浏览 25451人参与
# 薪资一样,你会选择去大厂还是小公司 #
16794次浏览 103人参与
# 辞职之后最想做的一件事 #
11551次浏览 167人参与
# 你见过最离谱的招聘要求是什么? #
188743次浏览 1404人参与
# 晒一晒你收到的礼盒 #
62838次浏览 376人参与
# 选offer应该考虑哪些因素 #
20945次浏览 303人参与
# 金蝶求职进展汇总 #
44161次浏览 242人参与
# 非技术岗薪资爆料 #
355897次浏览 2747人参与
# Offer比较,求稳定还是求发展 #
49658次浏览 240人参与
# 你怀疑过自己的专业选择吗? #
17595次浏览 201人参与
# 为了秋招你都做了哪些准备? #
11133次浏览 166人参与
# 你想吐槽公司的哪些规定 #
17841次浏览 68人参与
# 工作中的卑微时刻 #
9156次浏览 56人参与
# 第一份工作应该只看薪资吗 #
139072次浏览 1462人参与
# 我的工作日记 #
99069次浏览 1275人参与
# 秋招想进国企该如何准备 #
58549次浏览 376人参与