Srping:bean循环依赖问题

2023-11-08

Spring 为了解决单例的循环依赖问题,使用了 三级缓存 ,递归调用时发现 Bean 还在创建中即为循环依赖

  • 单例模式的 Bean 保存在如下的数据结构中:

/** 一级缓存:用于存放完全初始化好的 bean **/ private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256); /** 二级缓存:存放原始的 bean 对象(尚未填充属性),用于解决循环依赖 */ private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16); /** 三级级缓存:存放 bean 工厂对象,用于解决循环依赖 */ private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16); /** bean 的获取过程:先从一级获取,失败再从二级、三级里面获取 创建中状态:是指对象已经 new 出来了但是所有的属性均为 null 等待被 init */

 

检测循环依赖的过程如下:

  • A 创建过程中需要 B,于是 A 将自己放到三级缓里面 ,去实例化 B
  • B 实例化的时候发现需要 A,于是 B 先查一级缓存,没有,再查二级缓存,还是没有,再查三级缓存,找到了!
  • 然后把三级缓存里面的这个 A 放到二级缓存里面,并删除三级缓存里面的 A
  • B 顺利初始化完毕,将自己放到一级缓存里面(此时B里面的A依然是创建中状态)
  • 然后回来接着创建 A,此时 B 已经创建结束,直接从一级缓存里面拿到 B ,然后完成创建,并将自己放到一级缓存里面

 

 

非单例不进行缓存

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

Srping:bean循环依赖问题 的相关文章

  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • Spring(MVC)SQL注入避免?

    我想知道 Spring MVC 如何处理 SQL 注入 以及其他安全问题 XSS 代码 javascript 注入等 我主要讨论的是转义添加到数据库等的值 我似乎找不到任何答案 因为每次我搜索涉及依赖注入的 spring sql 注入结果时
  • 自定义列表字段点击事件

    我正在编写一个应用程序 其中我创建了用于显示列表视图的自定义列表字段 我的 CustomListField 包含连续的一个图像和文本 我正在通过单击列表字段行获取字段更改侦听器 但我也想将字段更改侦听器放在图像上 谁能告诉我我该怎么做 这是
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • GWT、Maven、Spring - 在 Maven 构建上获取 com.thoughtworks.qdox.parser.ParseException:语法错误

    我正在尝试集成此演示中的代码 http code google com p gwt spring starter app http code google com p gwt spring starter app 进入我的主要 Spring
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • 为什么解析这个 JSON 会抛出错误?

    我正在尝试解析这个 JSONObject query yahoo count 1 results rate Name USD INR id USDINR Time 12 19pm Date 10 31 2015 Bid 65 405 Ask
  • 使用@Transactional注解批量插入

    在我的 Spring 应用程序中 我想一次性在数据库中插入近 1500 条记录 我在后端使用 Spring 4 X 和普通休眠 在我的服务层中 我使用 Transactional 注释 现在 在某个时间点之后插入记录时 我遇到内存不足错误
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • 确定 JavaFX 中是否消耗了事件

    我正在尝试使用 JavaFX 中的事件处理来做一些非滑雪道的事情 我需要能够确定手动触发事件后是否已消耗该事件 在以下示例中 正确接收了合成鼠标事件 但调用 Consumer 不会更新该事件 我对此进行了调试 发现 JavaFX 实际上创建
  • 检测到 JVM 正在关闭

    我有一个使用 addShutdownHook 处理 Ctrl C 的 Swing 应用程序 它工作正常 直到我的关闭任务之一调用一个在正常情况下更改 JLabel 文本的函数 此时它挂起 我认为问题是 Swing EDT 已终止或正在等待某
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样

随机推荐

  • Windows10上使用VS2017编译OpenCV3.4.2+OpenCV_Contrib3.4.2+Python3.6.2操作步骤

    1 从https github com opencv opencv releases 下载opencv 3 4 2 zip并解压缩到D soft OpenCV3 4 2 opencv 3 4 2目录下 2 从https github com
  • ps2021神经网络AI滤镜下载,ps神经网络滤镜安装包

    如何解决ps2021 新版 AI神经滤镜不能用 网上买正版 更新下就好了 盗版的都会有各种这样的问题 ps2021神经AI滤镜是需简要上传云端 由Adobe官方服务器人工智能运算的 Ps2021版本新增了Ai神经元滤镜 它不是与软件一起安装
  • 如何实现Android app开机自启动

    这里写目录标题 前言 代码实现 AndroidManifest xml BootReceiver java MainActivity java MyService java 问题解决 前言 上一篇文章如何实现无界面Android app介绍
  • 深度学习中Epoch、Batch以及Batch size的设定

    Epoch 时期 当一个完整的数据集通过了神经网络一次并且返回了一次 这个过程称为一次 gt epoch 也就是说 所有训练样本在神经网络中都 进行了一次正向传播 和一次反向传播 再通俗一点 一个Epoch就是将所有训练样本训练一次的过程
  • ajax url传递中文乱码,jquery.ajax的url中传递中文乱码问题的解决方法

    JQuery JQuery默认的contentType application x www form urlencoded 这才是JQuery正在乱码的原因 在未指定字符集的时候 是使用ISO 8859 1 ISO8859 1 通常叫做La
  • 数据结构与算法实验3(栈) 括号匹配

    数据结构与算法实验3 栈 括号匹配 用栈ADT应用 对称符号匹配判断 输入一行符号 以 结束 判断其中的对称符号是否匹配 对称符号包括 lt gt 输出分为以下几种情况 1 对称符号都匹配 输出 right 2 如果处理到最后出现了失配 则
  • 54331 DCDC 纹波 干扰 收音机 原因

    用了一个TPS54331 把12 V 转5V后 再经过一个LDO转换为3 3V给收音IC 结果干扰非常大 这之前用的是LM2596 对收音机干扰很小 分析输出纹波大 但是一直找不到原因 最后 经过排查 对比54331的datasheet 发
  • docker第三讲 docker启动redis容器以及解决redis-server启动redis直接挂的问题

    本地启动配置redis 安装包安装 下载安装包 下载地址 Download Redis 安装gcc yum install gcc 把下载好的redis 6 2 1r 1 tar gz放在 usr local文件夹下 并解压 wget ht
  • 小波教程-part2-傅立叶变换和短时傅立叶变换

    1 基本原理 让我们简要回顾一下第一部分 我们基本上需要小波变换 WT 来分析非平稳信号 即其频率响应随时间变化的信号 我已经写过傅立叶变换 FT 不适合非平稳信号 并且已经展示了一些例子以使其更加清晰 快速回顾一下 让我举一个例子 假设我
  • 使用 Live555 搭建流媒体服务器

    搭建环境为Centos 7 2 64bit 一 安装gcc编译器 yum install gcc c 二 安装live555 wget http www live555 com liveMedia public live555 latest
  • Swagger使用详解(基于knife4j方案)

    1 简介 Swagger 是一个规范和完整的框架 用于生成 描述 调用和可视化 RESTful 风格的 Web 服务 总体目标是使客户端和文件系统作为服务器以同样的速度来更新 文件的方法 参数和模型紧密集成到服务器端的代码 允许 API 来
  • AttributeError: ‘function‘ object has no attribute ‘xxx‘报错问题

    问题描述 AttributeError function object has no attribute send bp route mail def mail message Message subject 邮箱测试 recipients
  • 使用自动模型

    本文通过文本分类任务演示了HuggingFace自动模型使用方法 既不需要手动计算loss 也不需要手动定义下游任务模型 通过阅读自动模型实现源码 提高NLP建模能力 一 任务和数据集介绍 1 任务介绍 前面章节通过手动方式定义下游任务模型
  • 详解python中的列表,元组,字典以及集合

    在Python中有4种内建的数据结构 列表 元组 字典 集合 今天我们将会学习如何使用它们 以及它们如何使编程变得简单 在开始讲解之前小编在这磨叽两句 小编本身就是一名python开发工程师 我自己花了三天时间整理了一套python学习教程
  • 需求分析师如何提高核心竞争力

    本文就自身的工作经历及经验 提出几点如何提高需求分析师的核心竞争力建议 欢迎各位在评论区补充 一 硬实力 业务能力 了解所在行业的基本业务流程 公用模块的设计思路 新模块的设计思维模式 文笔能力 包括PPT材料汇报 PPT立项材料 PPT结
  • 常见JVM面试题及答案整理

    前言 总结了JVM一些经典面试题 分享出我自己的解题思路 希望对大家有帮助 有哪里你觉得不正确的话 欢迎指出 后续有空会更新 1 什么情况下会发生栈内存溢出 思路 描述栈定义 再描述为什么会溢出 再说明一下相关配置参数 OK的话可以给面试官
  • 实现一个可左右滑动操作的vue3组件

    为了实现左右滑动能够切换页面 便有了做成组件的想法 代码实现 监听touchstart 记录开始位置 监听touchmove 记录移动的位置 计算移动的方向 再把值设置给translateX 计算结果的值要能够跟随手指移动 加入锁定方向 是
  • Oracle 自定义分隔函数

    今天上班时 产品经理反馈客户有一批存量数据中 biz type 存在多个业务键号使用逗号分隔 现在需要将该字段调整为基于逗号分隔的多行记录 Oracle 自定义分隔函数 create or replace function split st
  • 0007.整数反转(简单)

    代码 java版 public class Solution 反转 public static int reverse int x int aa int Math pow 2 31 1 2147483646 int bb int Math
  • Srping:bean循环依赖问题

    Spring 为了解决单例的循环依赖问题 使用了 三级缓存 递归调用时发现 Bean 还在创建中即为循环依赖 单例模式的 Bean 保存在如下的数据结构中 一级缓存 用于存放完全初始化好的 bean private final Map