在Spring框架中,涉及到循环依赖时,为了解决循环依赖问题,使用了三级缓存,其中包括上面提到的二级Map。
具体来说,三级缓存分别是:
ObjectFactory
,当检测到循环依赖时,可以通过这个ObjectFactory
创建Bean。现在来解释一下为什么需要这个二级Map(earlySingletonObjects
):
BeanFactory
在实例化Bean时,如果发现循环依赖,它会按照以下步骤进行处理:
singletonObjects
缓存中存在已经完全初始化的Bean实例,直接返回。earlySingletonObjects
缓存中存在尚未完全初始化的Bean实例,说明发生了循环依赖,通过singletonFactories
中保存的ObjectFactory
来创建Bean。earlySingletonObjects
缓存。earlySingletonObjects
缓存移至singletonObjects
缓存。这个二级Map(earlySingletonObjects
)的作用就是用于保存尚未完全初始化的Bean实例,在发生循环依赖的情况下,通过singletonFactories
中保存的ObjectFactory
来创建Bean实例。这样,即使Bean在创建过程中发现了循环依赖,也能够提前暴露尚未完全初始化的Bean实例,从而避免循环依赖导致的问题。
Proudly powered by WordPress