Spring如何解决循环依赖?

Spring如何解决循环依赖?
public Class A {
@Autowired
private B b;
}
public Class B {
@Autowired
private A a;
}

A实例化后【放入缓存】,对属性注入populateBean()才对B实例化,而在此过程中又需要实例化A,如果没有缓存,可能又得重新实例化A,容易造成循环依赖…
所以在实例化前需要先在缓存中进行查找,避免二次创建。
这里所谓三级缓存介绍:
* singletonObjects:用于存放完全初始化好的 bean,从该缓存中取出的 bean 可以直接使用。
* earlySingletonObjects:提前曝光的单例对象的cache,存放原始的 bean 对象(尚未填充属性),用于解决循环依赖。
* singletonFactories:单例对象工厂的cache,存放 bean 工厂对象,用于解决循环依赖。

了解spring中Bean加载过程,才能知道为什么要引入缓存来解决循环依赖。 Spring如何解决循环依赖?_第1张图片

spring循环依赖不能解决的情况
a 构造器注入循环依赖
b prototype模式field属性注入循环依赖
能解决的情况
a singleton模式field属性注入(setter方法注入)循环依赖

大神博客:https://www.cnblogs.com/longy2012/articles/12834762.html

你可能感兴趣的:(spring源码)