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知识基础