Spring三级缓存源码解析

news/2024/10/18 18:13:56/

Spring三级缓存

    • 前置知识
      • 三级缓存定义
      • SpringBean生命周期
    • Bean的初始化
      • getSingleton 分析
      • 加入一级缓存
    • CreateBean过程(A)
      • A填充属性B
      • B填充属性A,执行getSingleton(A)
      • B完成初始化

前置知识

三级缓存定义

java">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也完成初始化,并放入一级缓存,并移除其他级别的缓存


http://www.ppmy.cn/news/1434213.html

相关文章

递归、搜索与回溯算法:综合练习

例题一 解法&#xff1a; 算法思路&#xff1a; ⾸先&#xff0c;我们在第⼀⾏放置第⼀个皇后&#xff0c;然后遍历棋盘的第⼆⾏&#xff0c;在可⾏的位置放置第⼆个皇后&#xff0c;然后再遍历第三⾏&#xff0c;在可⾏的位置放置第三个皇后&#xff0c;以此类推&#xff0c…

比特币叙事大转向

作者&#xff1a;David Lawant 编译&#xff1a;秦晋 要理比特币解减半动态&#xff0c;最关键的图表是下面这张&#xff0c;而不是价格图表。它显示了自 2012 年以来&#xff0c;矿业总收入与比特币现货交易量的比例&#xff0c;并标注了三个减半日期。 虽然矿工仍然是比特币生…

IDEA 编码格式设置 UTF-8

IDEA 编码格式设置 UTF-8 1.文件编码设置为UTF-8 Editor > File Encodings 2.编译编码设置为utf-8 Build&#xff0c;Execution&#xff0c;Deployment > Complier > Java Complier 按图中设置&#xff1a;-encoding utf-8

SpringCloud之OpenFeign简单使用

SpringCloud之OpenFeign简单使用 文章目录 SpringCloud之OpenFeign简单使用一、远程调用功能使用url形式的方式测试 二、负载功能测试 三、熔断降级 OpenFeign是springcloud在Feign的基础上支持了SpringMVC的注解&#xff0c;如RequestMapping等等。OpenFeign的FeignClient可以…

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion

曲线救国|基于函数计算FC3.0部署AI数字绘画stable-diffusion 基于函数计算FC2.0部署AI数字绘画stable-diffusion基于函数计算FC3.0部署AI数字绘画stable-diffusion总结 在经过了上一次曲线救国失败经历之后&#xff0c;失败经历参考博文&#xff1a;https://developer.aliyun.c…

如何在Windows服务做性能测试(CPU、磁盘、内存)

目录 前言1. 基本知识2. 参数说明 前言 由于需要做一些接口测试&#xff0c;测试是否有真的优化 1. 基本知识 该基本知识主要用来用到Performance Monitor&#xff0c;以下着重介绍下这方面的知识 性能监视器&#xff08;Performance Monitor&#xff09;&#xff1a;Windo…

深度学习算法简介(一)

目录 ⛳️推荐 前言 1、深度神经网络&#xff08;DNN&#xff09; 2、卷积神经网络&#xff08;CNN&#xff09; 3、残差网络&#xff08;ResNet&#xff09; 4、LSTM&#xff08;长短时记忆网络&#xff09; 5、Word2Vec 6、Transformer 7、生成对抗网络&#xff08;…

中间继电器 RXMA2 RK 211 188 DC48V 板前接线 JOSEF约瑟

系列型号 RXMA2 RK211185中间继电器&#xff1b; RXMA2 RK211186中间继电器&#xff1b; RXMA2 RK211188中间继电器&#xff1b; RXMA2 RK211189中间继电器&#xff1b; RXMA2 RK211191中间继电器&#xff1b; DZ-651中间继电器&#xff1b; DZ-652中间继电器&#xff1…