前提:不能解决 1、构造器注入 2、多例
解决:set注入、@Autowire注入
Spring通过三级缓存解决循环依赖:A - > B ,B -> A
singletonObjects 一级缓存(单例池)
earlySingletonObjects 二级缓存
singletonFactories 三级缓存
1、实例化 A 对象之后,将 A 放入三级缓存。
2、对A对象进行属性填充时,需要注入B 对象,之后实例化对象B,B对象也将自己放入三级缓存
3、B 对象属性填充时查询A对象步骤:
从三级缓存中查找——>从二级缓存中查找——>从一级缓存中查找
从三级缓存中查找A对象,找到以后注入A对象,然后将A对象从三级缓存中删除,
执行相关扩展操作将A对象放入二级缓存。
4、B对象实例化、属性填充以后,A对象再进行进行属性填充。