一、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);
网友评论