Spring

循环依赖

循环依赖只会出现在 单例情况(非原形prototype)下,并且通过属性设置(非构造函数方式)成员变量的情况下。

DefaultSingletonBeanRegistry

三级缓存(三个map)

singletonObjects  ConcurrentHashMap<String, Object> 存放已经经历了完整周期的bean对象

earlySingletonObjects HashMap<String, Object> 存放早期暴露出来,未完成完整周期(属性未设置)的bean对象

singletonFactorys HashMap<String, ObjectFactory> 存放生成bean的工厂类:

举例:

A, B循环引用,创建A时,查找缓存,都没有,把A对应的工程类放入到三级缓存,发现A依赖B, 创建B,创建B时,把B的工厂类放到三级缓存中,B依赖A, 从缓存中查找A, 发现在三级缓存中有A的工厂类,然后A初始化,此时A的初始化对象就放到二级缓存中,B中的属性指向A的初始化对象,B完成创建,放入到一级缓存,此时A也可以完成属性填充,填充完,进入一级缓存。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容