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

devtools/2024/9/25 10:29:32/

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

相关文章

ubuntu通过crontab创建定时任务,并执行sh

1、初始化crontab 执行命令 crontab -e no crontab for username - using an empty one Select an editor. To change later, run select-editor.1. /bin/nano <---- easiest2. /usr/bin/vim.basic3. /usr/bin/vim.tiny4. /bin/ed选择第一项 /bin/nano即可&#x…

springAOP的概念以及使用

四 AOP的概念以及使用 一 Aop的场景复现 在执行方法时&#xff0c;我们总是需要去记录&#xff0c;执行前&#xff0c;和执行后&#xff0c;来判断执行是否出错&#xff0c;例如日志。按照以上要求我们总是在方法执行前和执行后&#xff0c;去记录参数和结果&#xff0c;每个…

值传递和地址传递

文章目录 目录值传递地址传递 目录 值传递 package com.zhang.parameter; //值传递 public class MethodDemo1 {public static void main(String[] args) {int a 10;System.out.println(a);System.out.println("~~~~~~~~~~~~~~~");change(a);//无论你传入的是什么 …

Kali Linux扩容(使用图形化界面)

因为今天在拉取vulhub中的镜像的时候报错空间不够&#xff0c;因为最开始只给了20GB的空间&#xff0c;所以现在需要扩容了&#xff0c;结合了一下网上的找到了简便的解决方法 1.首先虚拟机设置->磁盘->扩展 小插曲&#xff1a;在对虚拟机磁盘进行扩容以后&#xff0c;…

当下最热门的区块链—Sol链:开发搭建

Sol链作为去中心化的应用层区块链技术&#xff0c;具有独特的优势和广阔的发展前景。本文将从Sol链的概念、特点、应用场景、思考深度等方面进行介绍&#xff0c;带您领略Sol链的魅力。 【Sol链是什么】 Sol链是一种去中心化应用层区块链技术&#xff0c;它旨在解决区块链技术…

Rust :快速了解 VecDeque 双向队列

VecDeque是Rust标准库中的一个双端队列&#xff08;double-ended queue&#xff09;实现&#xff0c;它提供了在队列两端进行高效插入和删除操作的能力。双端队列是一种具有队列和栈的性质的数据结构&#xff0c;元素可以从两端弹出&#xff0c;其限定插入和删除操作在表的两端…

NAT的知识点和实现

1.NAT的作用&#xff1a; &#xff08;1&#xff09;、把内网私网IP转换公网IP&#xff1b; &#xff08;2&#xff09;、隐藏内网&#xff0c;起到保护内网作用&#xff1b; &#xff08;3&#xff09;、适当的缓解的IPv4地址空间枯竭&#xff1b; &#xff08;4&#xff…

自学黑客技术多长时间能达到挖漏洞的水平?

作为一名白帽黑客&#xff0c;自学黑客技术是一种既刺激又实用的技能。然而&#xff0c;很多初学者都好奇&#xff0c;自学这门技术需要多长时间才能达到挖掘漏洞的水平。本文将从黑客的角度详细探讨这个问题&#xff0c;包括学习路径、实践方法和一些个人经验分享。 自学路径…