Spring三级缓存
2021-04-23 03:28
                         标签:业务开发   业务   head   www   对象   描述   构造器   有关   exception    在创建过程中,都是从三级缓存(对象工厂创建不完整对象),将提前暴露的对象放入到二级缓存,从二级缓存拿到后,完成初始化,放入一级缓存。 A的某个field或者setter依赖了B的实例对象,同时B的某个field或者setter依赖了A的实例对象”这种循环依赖的情景。 一定需要三级缓存吗? ?	和AOP有关,第三级缓存的目的是为了延迟代理对象的创建(以应对循环依赖问题)。如果可以在实例化完成后立即创建代理对象,就不需要三级缓存了,所以二级缓存也是可以解决循环依赖的。为啥要额外多添加一层缓存?因为 Spring 的设计原则是在 Bean 初始化完成之后才为其创建代理 Spring三级缓存 标签:业务开发   业务   head   www   对象   描述   构造器   有关   exception    原文地址:https://www.cnblogs.com/brightdagger/p/14687489.htmlSpring解决循环依赖的问题
// 业务开发中经常这么写,field注入、setter注入都OK,但是构造器注入会报错BeanCurrentlyInCreationException
// 有这种循环依赖问题存在Spring却依然能够正常启动工作,为什么?Spring帮我们搞定了:三级缓存
@Service
public class AServiceImpl implements AService {
    @Autowired
    private BService bService;
}
@Service
public class BServiceImpl implements BService {
    @Autowired
    private AService aService;
}
 
名称 
描述 
 
singletonObjects 
一级缓存,存放完整的 Bean。 
 
earlySingletonObjects 
二级缓存,存放提前暴露的Bean,Bean 是不完整的,未完成属性注入和执行 init 方法。 
 
singletonFactories 
三级缓存,存放的是 Bean 工厂,主要是生产 Bean,存放到二级缓存中。 
上一篇:四月二十一号Java知识基础