spring circular dependency

2019-12-11  本文已影响0人  毛里求疵

一、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);
上一篇 下一篇

猜你喜欢

热点阅读