spring生命周期加载过程
image.png三级缓存的作用
class DefaultSingletonBeanRegistry{
//一级缓存,存储经过完整生命周期的bean对象
private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);
//出现嘞循环依赖时,提前创建的AOP代理对象会存在这里(还没有经过完成的生命周期),防止多个服务提前创建AOP代理对象导致单例模式的破坏
private final Map<String, Object> earlySingletonObjects = new ConcurrentHashMap(16);
//三级缓存,打破循环依赖,在对象开始实例化时,如果该对象支持单例、允许循环依赖、在创建中,便会将该对象放入到这个缓存中
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap(16);
}
循环依赖与解决
1、三级缓存
2、@Lazy注解
网友评论