java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring如何处理循环依赖

在Spring中如何处理循环依赖问题

作者:MuseLss

Spring解决循环依赖的关键在于提前曝光未完全创建的bean,在Spring中创建Bean分为实例化、属性填充和初始化三步,循环依赖的解决思路是先创建A的bean实例,此时A是不完整的,用一个Map保存不完整的A,再创建B,B需要注入A

Spring如何处理循环依赖

解决的关键就在于提前曝光未完全创建的bean。

在Spring中创建Bean分为三步

循环依赖的解决思路

在Spring中,只有同时满足以下两点才能解决循环依赖的问题。

1.依赖的bean必须都是单例。

2.依赖注入的方式,不能全是构造函数注入。

Sping解决循环依赖全流程

首先了解Spring bean相关的三个Map

在实例化bean,Spring是不知道当前bean有没有循环依赖的,它会义无反顾的往singletonfactories中存放当前bean的工厂,这个步骤就是提前曝光

然后开始属性注入,此时bean A发现要注入bean B,所以请执行getBean(B)

此时就到了B这个bean属性注入的步骤了,调用了getBean(A),A此时在singletonfactories中找到提前暴露的工厂的到了A,然后把A从singletonfactories中删除,放到earlySingletonObjects中。

此时B属性注入成功,然后进行初始化,最后B存放到singletonObject中。

此时又回到了A注入B的地方,完成了对B的注入,然后A也从earlySingletonObjects删除,存放到singletonObject中。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文