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 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • org.apache.hadoop.security.AccessControlException:客户端无法通过以下方式进行身份验证:[TOKEN,KERBEROS] 问题

    我正在使用 java 客户端通过 Kerberos 身份验证安全访问 HDFS 我尝试打字klist在服务器上 它显示已经存在的有效票证 我收到的异常是客户端无法通过以下方式进行身份验证 TOKEN KERBEROS 帮助将不胜感激 这是一
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 内部类的构造函数引用在运行时失败并出现VerifyError

    我正在使用 lambda 为内部类构造函数创建供应商ctx gt new SpectatorSwitcher ctx IntelliJ建议我将其更改为SpectatorSwitcher new反而 SpectatorSwitcher 是我正
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 创建一个 JSON 对象以在 Spring Boot 测试中发布

    我想编写基本测试来使用 JSON 负载在 users URL 上执行 POST 请求来创建用户 我找不到如何将新对象转换为 JSON 到目前为止有这么多 这显然是错误的 但解释了目的 Test public void createUser
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 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