spring circular dependency

一、Spring的生命周期

image

二、循环依赖

//三种方式

1、构造器参数循环依赖

2、setter方式(singleton)

3、setter方式(prototype)

三、问题分析

1、从上图生命周期可以推出“构造器参数循环依赖”Spring是无法解决的。

2、由于三级缓存不保存非单例模式的bean对象,所以无法解决上述prototype方式。

3、只有singleton方式的循环依赖,是可以通过Spring的第三级缓存来解决的。

四、三级缓存

// 第一级缓存,里面放置的是实例化好的单例对象
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);

// 第二级缓存,里面存放的是要被实例化的对象的对象工厂
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);

// 第二级缓存,里面存放的是提前曝光的单例对象
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16);
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容