一级缓存无法解决循环依赖问题,singletonObjects视为一个单例bean的集合。所以引入了二级缓存。
加入二级缓存后解决循环依赖的步骤
1要初始化A,先去一级缓存看看有无A的实例,没有先去构造A的半成品,并且放入二级缓存。
2依赖注入B,此时先去二级缓存里看看有无半成品的B,没有则执行B的初始化,把b的实例放入二级缓存。
3调用b.setA(),到二级缓存中找A的实例来初始化b,初始化成功,把成品b放入一级缓存。
4有了完整的b对象,a.setB()成功,a初始化成功,把a对象放入一级缓存。