spring 三级缓存

2023-11-12

spring 三级缓存

Spring三级缓存是Spring框架用来解决循环依赖问题的一种机制,它包含三级缓存:singletonObjects、earlySingletonObjects和singletonFactories。

  1. singletonObjects缓存:用来存放已经完全初始化的单例Bean实例,也就是最终被返回的单例Bean实例。在缓存中,Bean的名字和Bean实例是以键值对的形式存在的。
  2. earlySingletonObjects缓存:用来存放已经创建,但还未完成初始化的单例Bean实例。这些Bean实例通常是因为依赖其他Bean实例而无法完成初始化,处于不完整状态。
  3. singletonFactories缓存:用来存放Bean实例的工厂对象,这些工厂对象可以用来创建单例Bean实例。当Bean实例处于循环依赖关系时,Spring框架会先创建一个用于创建Bean实例的工厂对象,放到singletonFactories缓存中。

三级缓存的实现原理如下:

  1. 当Spring容器创建Bean时,首先会从singletonObjects缓存中查找Bean实例,如果能找到则直接返回。
  2. 如果在singletonObjects缓存中没有找到Bean实例,则从earlySingletonObjects缓存中查找,如果找到了一个未完成初始化的Bean实例,则将其返回,并在后续的处理中完成初始化。
  3. 如果在earlySingletonObjects缓存中也没有找到Bean实例,则从singletonFactories缓存中查找是否存在创建Bean实例的工厂对象,如果存在,则通过工厂对象创建一个新的Bean实例,并将工厂对象从singletonFactories缓存中移除。
  4. 如果在singletonFactories缓存中也没有找到工厂对象,则需要创建一个新的工厂对象,并放到singletonFactories缓存中,以便后续使用。
  5. 创建Bean实例时,如果Bean存在循环依赖,那么Spring框架会先创建一个用于创建Bean实例的工厂对象,放到singletonFactories缓存中。然后通过工厂对象创建一个新的Bean实例,并将其放到earlySingletonObjects缓存中,以便后续处理。

通过这种方式,Spring框架能够解决循环依赖问题,同时提高了Bean实例的创建效率,避免了重复创建Bean实例的情况。但是,如果应用程序中存在过多的循环依赖,会导致三级缓存占用大量内存,从而影响应用程序的性能和稳定性。因此,在应用程序设计中,应该尽可能避免过多的循环依赖。
循环依赖

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring 三级缓存 的相关文章

  • Spring:url 无法正确解析链接

    尽管我对 Java 有丰富的经验 但我对 Spring 框架和 Web 应用程序还很陌生 当我在本地 tomcat 服务器上运行我的网站时 URL 为 http localhost 8080 myApp 现在 请求映射将我委托到我的主页 R
  • 使用synchronized关键字和lock有什么区别[重复]

    这个问题在这里已经有答案了 Java 5引入了lock方法 与synchronized关键字相比 使用lock有什么优点和缺点 同步 将锁定该方法内访问的任何资源 lock 允许您进行更精细的控制 例如 仅锁定某些资源 或者仅在满足特定条件
  • 如何在Spring webflux WebExceptionHandlder中将消息写入http body

    在 的帮助下这个帖子 https stackoverflow com questions 47631243 spring 5 reactive webexceptionhandler is not getting called 我通过自定义
  • java中使用多个分隔符分割字符串

    我正在研究一种数据挖掘算法 我需要使用多个单词来标记字符串 我有一个单独的文件 其中包含所有停用词 我需要做的是通过任何作为分隔符的单词 停用词 来标记输入字符串 例如 如果文件包含停用词 a is and of that 输入字符串变为
  • 为什么 java.util.concurrent.FutureTask 不可序列化

    我目前正在使用 Apache Wicket 我有一些 REST 调用 每个调用需要几秒钟 Wicket 只允许同步调用 ajax 所以我尝试使用 Future 和 Callable 这是我的课程的一部分 public abstract cl
  • Motorola Android 2.2 相机忽略 EXTRA_OUTPUT 参数

    我以编程方式打开相机来拍摄视频 我告诉相机使用如下代码将视频文件放置到指定位置 Intent intent new Intent MediaStore ACTION VIDEO CAPTURE File out new File sdcar
  • hibernate 如何确保二级缓存使用数据库中的最新数据进行更新

    我读到 使用 hibernate 的二级缓存 它可以通过减少数据 对象检索的数据库命中来提高应用程序性能 但是hibernate是如何保证二级缓存与数据库中的数据是最新的呢 例如 假设下面的类是实体并持久化到数据库中 Entity clas
  • 如何生成0-8范围内除一个特定数字之外的随机数?

    我正在尝试开发 Tic Tac Toe 游戏 其中玩家 1 将单击一个按钮放置 X 稍后玩家 2 计算机 将在第一步中随机将 O 放置到其他按钮 为此 我需要创建一个随机数0 8 之间 除了玩家 1 点击的那个之外 我正在使用以下代码来生成
  • Kafka 0.10 Java 客户端超时异常:包含 1 条记录的批次已过期

    我有一个单节点 多 3 个代理 Zookeeper Kafka 设置 我正在使用 Kafka 0 10 Java 客户端 我编写了以下简单的远程 在与 Kafka 不同的服务器上 生产者 在代码中我用 MYIP 替换了我的公共 IP 地址
  • 使用 Spring Java 配置自动装配 bean

    是否可以使用Spring的 Autowired用 Java 编写的 Spring 配置中的注释 例如 Configuration public class SpringConfiguration Autowired DataSource d
  • 本机查询 (JPA) 未重置并返回相同的旧结果

    我有一个本机 sql 查询如下 for init i 0 i lt 2 i String sql Select from accounts where id Query query em createNativeQuery sql Acco
  • 从多个文本文件读取数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我是Java编程新手 我正在尝试打印
  • 从字符串中删除特定字符[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何从字符串中删除特定字符 我有一个 Arraylist 测试数组 String line testingarray get index
  • 信号量如何工作?

    信号量可以小于0吗 我的意思是 假设我有一个 N 3 的信号量 并且我调用 down 4 次 那么 N 将保持为 0 但一个进程将被阻塞 反之亦然 如果一开始我调用 N 可以大于 3 吗 因为在我看来 如果 N 可以高于 3 如果一开始我调
  • PDFBox - 无障碍 PDF - 如何检查 PDF 标签是否具有符合无障碍指南的属性

    需要检查 PDF 标签是否具有符合辅助功能指南的属性 例子 H1 验证 PDF 中是否存在 H1 图像 图形标签 验证图像 图形是否具有 Alt 文本 语言 验证语言属性是否已设置 以便屏幕阅读器能够正确阅读 对于西班牙语和英语文档 应更新
  • 为数组生成随机索引

    我知道对于普通整数来说这是这样 但是有索引这样的东西吗 Random dice new Random int n dice nextInt 6 System out println n 你是什 么意思 数组索引是普通数字 所以你可以轻松地做
  • 在 Android 中创建硬链接和符号链接

    我正在创建一个应用程序 我想在其中使用 Android 外部内存文件系统中的硬链接和符号链接 我尝试过使用命令 Os link oldpath newpath Os link oldpath newpath 但是 当我尝试这样做时 我收到此
  • 正确检查 FTP 服务器连接

    我在程序开始时打开与 FTP 服务器的连接 在对服务器执行操作之前 我想检查连接是否已成功建立 最简单快速的方式 因此如果连接消失 我将尝试再次连接 我用这段代码来做到这一点 private boolean checkConnection
  • web.xml 过滤器如何工作?您可以将两个过滤器映射到所有页面 (/*) 并指定顺序吗?

    我想使用 Spring Security 它说将过滤器映射到 但我已经有一个映射到 的过滤器 即 Tuckee URLRewrite 过滤器 是否可以将两个过滤器映射到同一事物 并且有没有办法指定过滤器的调用顺序 是的你可以 servlet
  • spring+hibernate 没有 xml 的映射类

    在我的 applicationContext xml 中 这就是我将 xml 映射到 POJO 的方式 如何将目录映射到类文件而不需要创建 xml

随机推荐

  • 双列集合系列之Map集合的初了解

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于双列集合的相关操作吧 目录 Welcome Huihui s Code World 顶级接口Map 一 Map集合的特点 二 Map集合的常见子类 HashM
  • xss渗透(跨站脚本攻击)

    一 什么是XSS XSS全称是Cross Site Scripting即跨站脚本 当目标网站目标用户浏览器渲染HTML文档的过程中 出现了不被预期的脚本指令并执行时 XSS就发生了 这里我们主要注意四点 1 目标网站目标用户 2 浏览器 3
  • 项目管理中什么最重要?

    被问过多次这个问题 尤其是在面试的时候 有说需求最重要 有说控制最重要 有的冠冕堂皇 来个成本 质量 时间三要素 美其名曰都重要 免得以偏概全 经多方求证 思索 结合十余年的项目管理经历 敝以为 项目管理中干系人管理最重要 尤其是关键干系人
  • Java面向对象编程

    一个关系数据库文件中的各条记录 A 前后顺序不能任意颠倒 一定要按照输入的顺序排列 B 前后顺序可以任意颠倒 不影响库中的数据关系 C 前后顺序可以任意颠倒 但排列顺序不同 统计处理的结果就可能不同 D 前后顺序不能任意颠倒 一定要按照关键
  • textarea placeholder不显示

    textarea placeholder不显示 textarea 的 placeholder 属性值不显示的原因可能是
  • DirectD3D-纹理映射

    DirectD3D 纹理映射 标签 Direct3Ddirectx游戏游戏开发 2014 11 12 14 03 321人阅读 评论 0 收藏 举报 分类 DirectX 8 版权声明 本文为博主原创文章 未经博主允许不得转载 纹理映射的概
  • python哪些类型可以作为迭代器_Python教程|全面理解Python迭代器和生成器

    在Python中 很多对象都是可以通过for语句来直接遍历的 例如list string dict等等 这些对象都可以被称为可迭代对象 至于说哪些对象是可以被迭代访问的 就要了解一下迭代器相关的知识了 迭代器 迭代器对象要求支持迭代器协议的
  • Golang架构直通车——理解Go GC

    文章目录 设计原理 三色抽象 三色不变性 插入写屏障 删除写屏障 垃圾收集器的增量和并发 增量式垃圾收集 并发式垃圾收集器 Go GC演进过程 并发垃圾收集 回收堆目标 混合写屏障 设计原理 三色抽象 标记清除 Mark Sweep 算法是
  • 数学建模--退火算法求解最值的Python实现

    目录 1 算法流程简介 2 算法核心代码 3 算法效果展示 1 算法流程简介 1 设定退火算法的基础参数 2 设定需要优化的函数 求解该函数的最小值 最大值 3 进行退火过程 随机产生退火解并且纠正 直到冷却 4 绘制可视化图片进行了解退火
  • 异步javaScript

    在本文中 我们将解释什么是异步编程 为什么我们需要它 并简要讨论 JavaScript 历史上异步函数是怎样被实现的 预备知识 基本的计算机素养 以及对 JavaScript 基础知识的一定了解 包括函数和事件处理程序 目标 熟悉异步 Ja
  • 日增30-40亿数据量的数据库

    author skate time 2010 08 13 前几天和个朋友聊天 他说他有每天30 40亿条数据量的数据库如何规划与优化 简单了解需求是这30 40亿数据是每天采集的 然后同时还对这些采集的数据进行分析挖掘 对于这么大量的数据量
  • MySQL数据库使用小皮系统(phpstudy)的安装及配置流程

    小皮系统phpstudy的安装及配置流程 一 小皮系统 phpstudy 的下载 二 数据库管理工具 一 小皮系统 phpstudy 的下载 搜索 phpStudy V8 1 下载大约 78m 左右 官网下载地址 phpStudy 可以随时
  • Android红外遥控器移植

    1 编译hal层代码 红外的hal代码路径 hardware libhardware modules consumerir 最终生成consumerir default so 但system文件系统中并没有该库 选择安装该库即可 在devi
  • Bert模型做多标签文本分类

    Bert模型做多标签文本分类 参考链接 BERT模型的详细介绍 图解BERT模型 从零开始构建BERT 强推 李宏毅2021春机器学习课程 我们现在来说 怎么把Bert应用到多标签文本分类的问题上 注意 本文的重点是Bert的应用 对多标签
  • 2022年“网络安全”赛项黑龙江省赛选拔赛 任务书

    2022年 网络安全 赛项黑龙江省赛选拔赛 任务书 2022年 网络安全 赛项黑龙江省赛选拔赛 任务书 A模块基础设施设置 安全加固 200分 B模块安全事件响应 网络安全数据取证 应用安全 400分 C模块 CTF夺旗 攻击 200分 D
  • MYBATIS-PLUS入门使用、踩坑记录

    转载 mybatis plus入门使用 踩坑记录 灰信网 软件开发博客聚合 首先引入MYBATIS PLUS依赖 SPRING BOOT项目
  • Java事件处理机制

    Java事件处理机制涉及三个成员 事件源 事件和事件监听器事件源 Java的AWT或Swing组件 该组件就是事件源 通过new关键字即可创建事件 由系统自动产生事件监听器 整个事件处理的核心 事件监听器必须实现事件监听器接口 以鼠标事件为
  • 【ES】 es

    一 说明 1 通过kibana操作es 2 使用dsl命令操作es 3 需要已经安装es 必须 4 需要已经安装kibana 非必须 5 若是没有装kibana 可以用PostMan之类的请求工具 二 基础知识 1 Elasticsearc
  • 在vue项目中用BMap百度地图自定义定位icon不显示

    我自定义了图标但是不显示 先来看一下怎么用百度地图自定义图标 var myIcon new BMap Icon 自定义图标 require assets image L gif new BMap Size 24 21 图标的宽度和高度 va
  • spring 三级缓存

    spring 三级缓存 Spring三级缓存是Spring框架用来解决循环依赖问题的一种机制 它包含三级缓存 singletonObjects earlySingletonObjects和singletonFactories singlet