Spring三级缓存源码解析

前置知识

三级缓存定义

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {

	//一级缓存,成熟的对象,对象已经完成实例化和初始化,同一个对象只会出现在一个缓存中,三个缓存的对象不可能重复
	/** Cache of singleton objects: bean name to bean instance. */
	private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
 	//三级缓存,存放的是制造对象的方法,方法一经调用就会创造一个对象存放到二级缓存中
	/** Cache of singleton factories: bean name to ObjectFactory. */
	private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

	//二级缓存,提前暴露的缓存,缓存中的对象已经实例化,但尚未初始化。early:暴露
	/** Cache of early singleton objects: bean name to bean instance. */
	private final Map<String, Object> earlySingletonObjects = new HashMap<>(16);

}

SpringBean生命周期

在这里插入图片描述
例子:
在这里插入图片描述

Bean的初始化

getSingleton 分析

作用:

  1. 调用singletonFactory.getObject()创建bean
  2. 放入一级缓存

在这里插入图片描述

加入一级缓存

在这里插入图片描述

CreateBean过程(A)

重点1:此处A实例化后放入了三级缓存
在这里插入图片描述

A填充属性B

在这里插入图片描述

B填充属性A,执行getSingleton(A)

() -> getEarlyBeanReference(beanName, mbd, bean),三级缓存创建对象,执行的是此处代码

在这里插入图片描述

在这里插入图片描述

B完成初始化

在这里插入图片描述
B初始化完成后,A也完成初始化,并放入一级缓存,并移除其他级别的缓存

相关推荐

  1. spring oauth2 authorization server 配置

    2024-04-24 18:44:01       35 阅读
  2. redisson-spring-boot-starter 自动化配置

    2024-04-24 18:44:01       28 阅读
  3. spring-orm:6 HibernateJpaVendorAdapter

    2024-04-24 18:44:01       25 阅读
  4. Spring之Bean生命周期

    2024-04-24 18:44:01       22 阅读
  5. Spring之事务底层

    2024-04-24 18:44:01       13 阅读
  6. Spring之Bean生命周期

    2024-04-24 18:44:01       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-24 18:44:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-24 18:44:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-24 18:44:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-24 18:44:01       18 阅读

热门阅读

  1. class094 贪心经典题目专题6【左程云算法】

    2024-04-24 18:44:01       10 阅读
  2. c# 连接数据库、excel数据批量导入到数据库

    2024-04-24 18:44:01       11 阅读
  3. Semaphore

    Semaphore

    2024-04-24 18:44:01      9 阅读
  4. Dubbo

    Dubbo

    2024-04-24 18:44:01      11 阅读
  5. jvm学习笔记

    2024-04-24 18:44:01       9 阅读
  6. 快速制作个人电子签名

    2024-04-24 18:44:01       8 阅读
  7. TypeScript学习笔记7-枚举

    2024-04-24 18:44:01       10 阅读
  8. TCP案例-实时群聊

    2024-04-24 18:44:01       9 阅读
  9. AIGC技术/趋势

    2024-04-24 18:44:01       9 阅读