栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring 循环依赖 三级缓存 二级缓存

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring 循环依赖 三级缓存 二级缓存

spring 循环依赖 三级缓存 二级缓存

Bean生命周期
单例bean实例化后调用的方法
// Callback interface triggered at the end of the singleton pre-instantiation phase
// during {@link BeanFactory} bootstrap.
public interface SmartInitializingSingleton {

	void afterSingletonsInstantiated();

}

postProcessBeanDefinitionRegistry负责扫描注解变成beanDefinition对象,放入Map中

三级缓存作用

	
	private final Map singletonObjects = new ConcurrentHashMap<>(256);

	
	private final Map> singletonFactories = new HashMap<>(16);

	
	private final Map earlySingletonObjects = new ConcurrentHashMap<>(16);
ObjectFactory

将半成品对象提前暴露,本质是一个Lambda表达式() ->getEarlyBeanReference(beanName, mbd, bean),被AbstractAutoProxy实现,即该类用来实现APO的。

可以用两级缓存吗

用一级缓存和三级缓存就可以解决循环依赖:将半成品对象提前暴露在ObjectFactory中

但如果有aop的话,每次调用ObjectFactory都会产生一个代理对象,这就不能保证单例了,所以需要二级缓存来存代理对象

参考
Spring中的循环依赖
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/930284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号