spring一二三级缓存和@Lazy解决循环依赖流程

news2025/3/11 10:05:52

 简单对象指的是 实例化后还没有属性注入的时候的早期bean

lambda表达式用于判断a是否存在aop代理

假如a和b循环依赖,a实例化时,

bean创建流程如下:


0,创建一个set记录当前正在实例化的bean,

1.实例化a的简单对象时,从一级缓存寻找,没找到则开始创建,首先把a的lambda表达式放入三级缓存,并在set中标识a正在创建

2.填充a中属性b的时候,去一级缓存寻找b的实例,如果没找到,则创建b的实例化简单对象,并把b的lambda表达式放入三级缓存,并在set中标识b正在创建,然后为b属性注入,发现存在为a的属性,先去一级缓存找a,没找到,又通过set发现a正在创建,则判断出a和b存在循环依赖,然后去二级缓存寻找a,也没找到,最后去三级缓存中取出a的lambda表达式,判断a是否存在aop代理,如果存在aop代理,则生成a的代理对象放入二级缓存,否则生成a的普通对象放入二级缓存,并删除三级缓存中的a。 b属性注入完毕后初始化完成,将b的实例存入一级缓存。删除其他缓存中的b。

3.经过b的创建后,创建c时,如果a和c也循环依赖,则填充c中的a属性时,可直接从二级缓存取出a。c属性注入完毕后初始化完成,将c的实例存入一级缓存。删除其他缓存中的c。

4.a得到b和c后,最后填充完其他属性后,把a的实例(普通或代理),通过二级缓存get(beanName)后存入一级缓存,并从二级缓存删除

@Lazy注解解决循环依赖:

由spring直接注入属性的代理对象,从而解决循环依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1618241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

陆金所控股一季报到底是利好还是利空?

3月底,陆金所控股(LU.N;06623.HK)因其特别分红方案受到市场高度关注。但在4月23日发布的2024年一季度财报中,陆金所控股营收同比下降30.9%,净亏损8.3亿元。 两者对比,外界不由得对公司的经营状况产生疑惑。…

docker内实现多机多卡分布式训练

docker内实现多机多卡分布式训练 1. 多台docker宿主机网络配置2. 创建overlay 网络3. 注意 1. 多台docker宿主机网络配置 https://docs.docker.com/network/overlay/ 这里需要创建overlay网络使得多台宿主机的容器可以通过网络连接 初始化swarm集群,并设置主节点&a…

条件编译 #和##运算符

目录 1. #运算符2. ##运算符3. 条件编译4. 题目分享总结 正文开始 前言: 本章为C语言语法完结撒花, 下文将进行C语言中#和##操作符以及条件编译的讲解, 来进一步让我们了解C语言. 作者主页: 酷酷学!!! 1. #运算符 #运算符将宏的⼀个参数转换为字符串字⾯量。它仅允许出现在带…

【刷题】前缀和入门

送给大家一句话: 既然已经做出了选择,最好还是先假定自己是对的。焦虑未来和后悔过去,只经历一个就够了。 – 张寒寺 《不正常人类症候群》 ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ(≧∇≦)〃))≧∇)ノ彡☆ ☆ミヾ(∇≦((ヾ…

比特币中的符文是什么?

比特币中的符文是什么? 比特币符文是存在于比特币区块链上的独特的、可替代的代币。它们旨在代表具有独特特征和元数据的可替代资产。 Ordinals 协议的创建者 Casey Rodamor 最近放弃了一项替代 BRC-20 可替代代币协议的提案,该替代方案被称为 Runes。 破…

STM32 HAL库F103系列之DAC实验(一)

DAC输出实验 原理图 DAC数据格式 DAC输出电压 DORX - 数据输出寄存器 Vref 3.3V 实验简要 1,功能描述 通过DAC1通道1(PA4)输出预设电压, 然后由ADC1通道1 (PA1) 采集,最后显示ADC转换的数字量及换算后的电压值 2,关闭通道1…

TypeError: Cannot read properties of undefined (reading ‘tapAsync‘)

项目启动,一直报tabAsync未定义,整个项目中没有找到引用的地方; 最终重新安装webpack4版本 解决问题; npm install webpack4

Android studio顶部‘app‘红叉- Moudle ‘XX.app’ dosen’t exist in project

Android studio顶部app红叉- Moudle ‘XX.app’ dosen’t exist in project 1、现象: 运行老项目或者有时候替换项目中的部分代码,明明没有错但是Android studio就编译报错了。 1.1 Android studio顶部app红叉。 1.2 点击Build没有clear菜单&#xff0…

掼蛋赢牌口诀

1、不能做头游,单张暂缓走。 2、起始出单张,表明有大王。 3、单牌先起步,对家应相助。 4、情况尚不明,对子可先行。 5、要想使个坏,就出三不带。 6、小顺往前凑,大顺必殿后。 7、哪张牌先下,倒数…

Electron+Vue3+ElectronForge整合 - 打包时整合 -分步打包

说明 本文介绍一下 Electron Vue3 的打包整合的基本操作。实现的效果是 : 1、一个正常的Vue3项目; 2、整合加入 Electron 框架 :开发时 Electron 加载的是开发的vue项目; 3、完成打包时整合:3.1 先完成vue3项目的正常…

情感识别——情感计算的模型和数据集调查

概述 情感计算指的是识别人类情感、情绪和感觉的工作,已经成为语言学、社会学、心理学、计算机科学和生理学等领域大量研究的主题。 本文将概述情感计算的重要性,涵盖思想、概念和方法。 情感计算是皮卡德于 1997 年提出的一个想法,此后出…

小案例:ToolBar+选项菜单

使用选项菜单,一般是用于做单选,需要重写方法: public boolean onCreateOptionsMenu(Menu menu) 如果想要实现事件监听,则采用基于回调的事件监听机制,可以监听到具体是哪一项被选中。即重写方法: publi…

基于Spring Boot的点餐平台网站设计与实现

基于Spring Boot的点餐平台网站设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 管理员登录界面,通过填写用户名、密码、角色…

OpenHarmony实战开发-性能测试工具SmartPerf Editor使用指导

概述 SmartPerf Editor是一款PC端桌面应用,通过监测、采集应用运行时FPS、CPU、GPU、Memory、Battery、Network等性能数据,帮助开发者了解应用的性能状况。SmartPerf Editor还集成了DrawingDoc功能,可录制Render Service绘制指令&#xff0c…

Idea如何本地调试线上测试服务器代码?

线上出现问题,但是没加日志打印拍脑门惋惜为啥不多打一行日志 加日志重新部署,半小时没了,问题还没有找到,头顶的灯却早已照亮了整层楼...... 排查别人线上的 bug,不仅代码还没看懂,还没一行日志&#…

Linux 终端中的目录切换

目录 ⛳️推荐 前言 理解 Linux 中的路径 利用 cd 命令变更目录 故障解决 文件或目录不存在 非目录错误 特殊目录符号 测试你的知识 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

AD 21、22 软件安装教程

AD2022安装包链接 链接:https://pan.baidu.com/s/1oMNbXibQ1Zjl0RTLdPDVGw 提取码:xfs4 软件下载 1.以管理员身份运行 2. 3. 4. 5.路径最好改为C盘以外的,如D盘,要新建一个空文件夹 6. 7.下载好以后 8.在Crack文件夹下找…

内插和抽取

抽取: 频域表达式的关系: 1、角频率扩大M倍 2、移动2pi、22pi…(n-1) 2pi 3、相加 4、幅度变为1/M 内插: 加入低通滤波,减小混叠,但是由于截短,也会造成误差,但是…

投资网站汇总

1、 中信证券(600030)历年财务指标——亿牛网https://eniu.com/gu/sh600030/cwzb 2、 3、 4、

Linux中文件描述符与重定向的深入探索

目录 1. 理解C语言的文件操作函数 2. 操作系统的文件操作接口 3. 文件描述符详解和其内核本质 4. 如何理解Linux下一切皆文件 5. Linux中的重定向 5.1 输出重定向 5.2 追加重定向 5.3 输入重定向 6. 结合文件描述符理解重定向 7.重定向的系统调用 在Linux操作系统中&a…