Spring 循环依赖
什么是循环依赖?
循环依赖是两个或者两个以上的bean相互持有对方,最终形成闭环。比如A依赖B、B依赖C、C依赖A__

Spring目前支持Field属性和单例bean循环依赖,不支持构造器方式
- propotype原型bean无法解决循环依赖
在创建前Spring也会判断bean的scope,如果是propotype则会抛出BeanCurrentlyInCreationException
异常

- 单例bean循环依赖解决思路

- bean A开始创建,实例化完成后直接放入singletonFactories,同时加入扩展操作
- bean A属性设置过程中发现依赖bean B,便通过BeanFactory.getBean获取bean B,发现bean B不存在,开始创建bean B
- bean B实例化完成后,开始属性设置,发现依赖bean A直接从singletonFactories获取bean A,然后升级bean A到earlySingletonObjects,在升级过程中执行扩展操作
- bean B创建完成放入singletonObjects中,bean A继续设置属性
- bean A创建完成,放入singletonObjects,完成循环依赖过程
org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#doCreateBean

本文来自博客园,作者:Vic呼叫89,转载请注明原文链接:https://www.cnblogs.com/baojiong/p/15705248.html

浙公网安备 33010602011771号