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

server/2024/9/24 16:04:54/

 简单对象指的是 实例化后还没有属性注入的时候的早期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.ppmy.cn/server/11682.html

相关文章

个人搭建alist网盘的经验记录备忘

1、搭建宝塔LINUX面板,安装Docker 2、添加仓库 3、从镜像拉取xhofe/alist:latest 4、添加容器 5、新建一个网站,别忘记申请个SSL证书,重要的是反向代理 6、新建个mysql数据库 7、修改alist数据库的链接地址,方便自己备份&a…

Win10 打开有些软件主界面会白屏不显示,其他软件都正常

环境: Win10专业版 英伟达4070 显卡 问题描述: Win10 打开有些软件主界面会白屏不显示,打开远程协助软件AIRMdesk,白色,其他软件都正常 解决方案: 网上说电脑没有接显示器独立显卡的关系导致 我是只有一台主机,没…

[C++][算法基础]筛选质数(线性筛)

给定一个正整数 n,请你求出 1∼n 中质数的个数。 输入格式 共一行,包含整数 n。 输出格式 共一行,包含一个整数,表示 1∼n 中质数的个数。 数据范围 1≤n≤ 输入样例: 8输出样例: 4 代码&#xf…

自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决

自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决 文章目录 1.前言2.doris是什么?2.1简介2.2介绍2.3使用场景2.4架构 3.官网4.构建部署4.1 构建环境4.2 doris2.0.4的fe和be镜像构建4.2.1 fe2.0.4镜像构建脚本4.2.2 be2.0.4镜像构建4.2.3 启动脚…

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中,与主流去中心化金融功能的兼容性一直是一大难题。相比之下,以太坊通过ERC-721和ERC-1155代币标准,为NFT和去中心化金融应用提供了支持,而比特币的应用范围却相对有限。然而,近年来&#…

string Leetcode 字符串算法题

344.反转字符串 API: StringBuffer 内部是 append 实现字符串的改变,不会每次改变字符串都创建一个新对象 StringBuffer(String.valueOf(s)).reverse().toString()不调用API, 使用双指针,分别从两端向中间聚拢 class Solution {public void reverseSt…

MTK6775/MT6775/曦力P70联发科处理器性能参数资料

联发科MT6775(曦力P70)芯片搭载强大的Arm Cortex-A73/A53八核CPU,并采用台积电12纳米FinFET制程工艺,相较于其他14纳米级别产品,功耗节省达到了15%。此外,曦力P70还配备了高效能的Arm Mali-G72 GPU,相比上一代产品曦力…

PAT——1013数素数(C++)

问题描述: 令 Pi​ 表示第 i 个素数。现任给两个正整数 M ≤ N ≤ ,请输出 到 ​ 的所有素数。 输入格式: 输入在一行中给出 M 和 N,其间以空格分隔。 输出格式: 输出从 ​ 到 的所有素数,每 10 个数字占…