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

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

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

相关文章

电脑问题快速判断

电脑开机没有任何反应 检查电源 检查电源是否有问题或损坏,可以短接方法检测 板电源卡口对自己接第四或第五根线,若风扇匀速转动,电源无问题,若不转动或转一下停一下,电源有问题 检查内部连线 确保主板上的线插的…

linux下编译c++程序报错“undefined reference to `std::allocator<char>::allocator()‘”

问题 linux下编译c程序报错“undefined reference to std::allocator::allocator()”。 原因 找不到c标准库文件。 解决办法 开始尝试给gcc指令添加-L和-l选项指定库路径和库文件名,但是一直不成功,后来把gcc改为g就可以了。

Google Play App Store API 获取谷歌安卓应用商城app数据接口

iDataRiver平台 https://www.idatariver.com/zh-cn/ 提供开箱即用的谷歌安卓应用商城google play app store数据采集API,供用户按需调用。 接口使用详情请参考Google Play App Store接口文档 接口列表 1. 获取指定app的基础信息 参数类型是否必填默认值示例值描…

重磅发布 | 《网络安全专用产品指南》(第一版)

2017年6月1日,《中华人民共和国网络安全法》正式实施,明确规定“网络关键设备和网络安全专用产品应当按照相关国家标准的强制性要求,由具备资格的机构安全认证合格或者安全检测符合要求后,方可销售或者提供。国家网信部门会同国务…

【python】python学生信息管理系统 ——数据库版(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

js进行数据移除性能比较(splice,map)

当使用 splice() 方法处理大量数据时,确实会遇到性能问题,因为它涉及到移动数组中的元素,导致操作的时间复杂度为 O(n)。对于大量数据,频繁的插入和删除可能会导致性能下降。 1、设置数组数据为10000,使用splice移除数…

MySQL从入门到高级 --- 2.DDL基本操作

文章目录 第二章:2.基本操作 - DDL2.1 数据库的常用操作创建数据库选择要操作的数据库删除数据库修改数据库编码 2.2 表结构的常用操作创建表格式查看当前数据库的所有表名称查看指定某个表的创建语句查看表结构删除表 2.3 修改表结构添加列修改列名和类型删除列修改…

水平越权,垂直越权

水平越权和垂直越权 水平越权 首先自己创建一个账号 然后在自己的修改密码,抓包,修改用户名等 但一般都会固定,它会固定当前用户名 垂直越权 不用登录就可以删除 当我们复制管理员的删除地址,然后访问它 它会跳出登录地址&#…

【六十四】【算法分析与设计】699. 掉落的方块,离散化操作,线段树优化,区间查询sum+区间更新update

699. 掉落的方块 在二维平面上的 x 轴上,放置着一些方块。 给你一个二维整数数组 positions ,其中 positions[i] [left(i), sideLength(i)] 表示:第 i 个方块边长为 sideLength(i) ,其左侧边与 x 轴上坐标点 left(i) 对齐。 每个…

[Meachines][Easy]Bizness

Main $ nmap -p- 10.10.11.252 --min-rate 1000 $ dirsearch -u https://bizness.htb/ $ whatweb https://bizness.htb/control/login 存在一个未授权的RCE $ git clone https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass.git $ cd Apache-OFBiz-Authenticat…

网络爬虫快速入门及爬取百度搜索结果(附源码)

前言 爬虫的基本结构及工作流程 1. 确定目标 首先,确定你想要爬取的目标,包括目标网站或网页、需要提取的数据类型(如文本、图片、视频等)以及爬取的深度(单页、整个网站等)。 2. 获取网页内容 使用HT…

STM32单片机C语言模块化编程实战:按键控制LED灯并串口打印详解与示例

一、开发环境 硬件:正点原子探索者 V3 STM32F407 开发板 单片机:STM32F407ZGT6 Keil版本:5.32 STM32CubeMX版本:6.9.2 STM32Cube MCU Packges版本:STM32F4 V1.27.1 虽然这里演示的是STM32F407,但是ST…

数控6面钻的优缺点

在木工、家具制造和建筑行业中,数控6面钻已成为一种革命性的工具。这种先进的机器以其高效、精准和多功能性受到了广大制造商的青睐。然而,就像任何技术产品一样,数控6面钻也有其优缺点。在本文中,我们将深入探讨数控6面钻的优缺点…

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】查找问题

20240423给飞凌的OK3588-C开发板适配OV13855【绿屏】查找问题 2024/4/23 19:43 修改2个部分: 1、DTS中CAM1由ISP0处理修改为ISP1处理。【感觉修改为ISP1之后就不出错了,难道ISP0有问题?】 2、ov13855.c修改为 荣品的RK3588开发板提供的SDK An…

等级保护详解:企业为何需要等级保护及等保测评的重要性

在信息化高速发展的今天,网络安全问题日益凸显,各类网络安全事件频发,给企业和个人带来了极大的损失。为了加强网络安全管理,提高网络安全防护能力,我国推出了网络安全等级保护制度,简称“等保”。那么&…

Fisher判别:理解数据分类的经典方法

在机器学习和统计分类的领域中,Fisher判别(也称为Fisher线性判别分析)是一种非常重要的方法,旨在从数据中提取重要特征,以实现对样本的分类。即Fisher判别分析(Fisher Discriminant Analysis, FDA&#xff…

【数据结构】stack queue —— 栈和队列

前言 这阵子一直在学数据结构,知识点消化地有点慢导致博客一直没写,现在总算是有时间歇下来补补前面落下的博客了。从现在起恢复周更,努努力一周两篇也不是梦……闲话少说,今天就让我们一起来认识栈和队列 1. 栈的介绍和使用 栈…

模块三:二分——69.x的平方根

文章目录 题目描述算法原理解法一:暴力查找解法二:二分查找 代码实现暴力查找CJava 题目描述 题目链接:69.x的平方根 算法原理 解法一:暴力查找 依次枚举 [0, x] 之间的所有数 i (这⾥没有必要研究是否枚举到 x /…

基于Linux系统命令行安装KingbaseES数据库

人大金仓通用性数据库(Kingbase)下载网址:人大金仓-成为世界卓越的数据库产品与服务提供商 选择“软件版本-数据库”,筛选条件Linux、完整版。找到需要的版本,点击下载。我下载的是KingbaseES_V008R006C008B0014_Lin6…

初入单元测试

单元测试:针对最小的功能单元(方法),编写测试代码对其进行正确性测试 Junit可以用来对方法进行测试,虽然是有第三方公司开发,但是很多开发工具已经集成了,如IDEA。 Junit 优点:可以灵活的编写测试代码&am…