Spring源码-循环依赖
循环依赖问题
先分析下bean生命周期, 简化版:
1. 扫描, 获取所有的BeanDefinition,存入BeanDefinitionMap
2. 遍历BeanDefinition, 准备创建bean
3. 推断构造方法, 通过反射, 实例化bean对象(原始对象)
4. 属性赋值
5. 初始化前, 初始化
6. 初始化后, 可能AOP
7. 把经过完整生命周期对象放入单例池SingletonObjects
触发循环依赖-场景1:
ABean创建 > A依赖了B > 创建BBean > B依赖了A > 发现ABean正在创建
循环依赖解决思路
利用三级缓存
三级缓存
- singletonObjects:单例池, 缓存的是经过完整生命周期的bean
- earlySingletonObjects:缓存的是未经过完整生命周期的bean. 如果出现了循环依赖, 会提前把未经过完整生命周期的bean放入二级缓存, 如果这个bean有AOP, 放入的是代理对象, 否则放原始对象,都是未经过完整生命周期的bean
- singletonFactories:存的是一个ObjectFactory, 一个lambda表达式.当bean实例化后, 会生成一个lambda表达式,放入三级缓存. 这个lambda可能被执行, 也可能不被执行. 当执行时候, 可以获取原始对象或者代理对象.在bean属性赋值时, 如果发现循环依赖(当前正在创建的bean被属性bean依赖),才会执行lambda表达式拿到一个对象, 放入二级缓存.如果bean需要AOP, lambda表达式返回的是代理对象, 否则返回原始对象.
相关文章:
Spring源码-循环依赖
循环依赖问题 先分析下bean生命周期, 简化版: 1. 扫描, 获取所有的BeanDefinition,存入BeanDefinitionMap 2. 遍历BeanDefinition, 准备创建bean 3. 推断构造方法, 通过反射, 实例化bean对象(原始对象) 4. 属性赋值 5. 初始化前, 初始化 6. 初始化后, 可能AOP 7. 把经过…...
Excel下拉填充时,如何使得数字不递增?
问题描述:Excel下拉填充时,如何使得数字不递增? 解决办法:先下拉填充数据之后,看到最后一个单元格的右下角有个填充设置的符号,右键选择复制单元格即可。其中这里的填充序列就是递增数字的操作。...
ThreadLocal原理以及内存泄露问题
1、ThreadLocal实现原理 1、每个线程中有一个ThreadLocalsMap,这是一个哈希表的结构里面有很多entry(也就是k-v),当我们使用ThreadLocal进行set值的时候,会将这个threadLocal设置为key,然后值设置为value放入ThreadLocalsMap,key为弱引用&am…...
值之字符串(string)
一、创建字符串 """单引号、双引号、三引号均能创建字符串""" s kidney s "kidney" s """kidney""" # 以上三种方法输出相同: kidney"""将数值转为字符串""&q…...
pytoch安装指定版本教程pytorch1.3安装笔记
一、先生成一个环境 如果电脑里安装了其他的torch版本,另外生成一个环境可以防止原先torch版本被替换掉。 打开conda的终端窗口输入以下命令就可以生成一个名为torch_1.3的环境: conda create -n torch_1.3 python3.6 输入以下命令进入到torch_1.3的…...
k8s 裸金属集群部署metalLB软负载均衡 —— 筑梦之路
metalLB 官方网站 Repo:https://github.com/metallb/metallb 官网:https://metallb.universe.tf/installation metalLB解决什么问题? MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议。 k8s 并没有为裸…...
uni-app使用echarts数据不更新
问题描述 uni-app使用echarts图表,接口请求数据更新后,图表不刷新。 解决方案 更新option前先调用clear() clear():清空当前实例,会移除实例中所有的组件和图表。 initChart() {this.gaugeChart echarts.init(document.getE…...
单挑特斯拉,华为智选车迈入第二阶段
文丨刘俊宏 编丨王一粟 华为智选车的节奏越来越快。 11月9日,华为跟奇瑞打造的首款C级纯电轿车智界S7发布,预售价为25.8万起。 在发布会上,华为常务董事、终端BG CEO、智能汽车解决方案BU董事长余承东采取手机以往最惯用的对标营销手法&a…...
acwing算法基础之搜索与图论--有向图的拓扑序列
目录 1 基础知识2 模板3 工程化 1 基础知识 拓扑序列:针对有向图而言,该序列内,所有边都是从前指向后的。 如果存在环,那么该图一定不存在拓扑序列。否则,一定存在拓扑序列。 有向图中的入度和出度。 入度为0的结点…...
Unity之NetCode多人网络游戏联机对战教程(7)--联机概念理解权威性Authority
文章目录 前言IsOwner权威 / AuthoritativeIsHostIsServerIsClientIsLocalPlayer 前言 在联机游戏中,常见的模式有Peer-to-Peer, Client与Server,也就是CS架构。NetCode基于CS架构开发,下面讲解一些概念知识。在NetCode中,会涉及…...
Go并发编程(上)
目录 一、go语言当中的协程 二、MPG模型介绍 三、Goroutine 的使用 3.1 协程的开启 3.2 优雅地等待子协程结束 四、捕获子协程的panic 五、管道Channel 5.1、认识管道 5.2、Channel的遍历和关闭 5.3 、用管道实现生产者消费者模型 5.4、Channel一些使用细节和注意事…...
MarkDown基础及表格、KaTeX公式、矩阵、流程图、UML图、甘特图语法
概述 最多可设置6级标题 技巧 列表 有序列表 MD语法: 1. 你好 2. 我也好呈现效果: 你好我也好 无序列表 MD语法: - a - b * aa * bbaaabbb效果: ab aabb aaabbb 结论,支持三种方式:-、*、 T…...
Citespace的使用
CiteSpace CiteSpace的相关介绍运行CiteSpace CiteSpace的相关介绍 CiteSpace作为一款优秀的文献计量学软件,能够将文献之间的关系以科学知识图谱的方式可视化地展现在我们面前。简单来说,面对海量的文献,CiteSpace能够迅速锁定自己需要关注…...
[模块]ES6与cjs的混合开发
[模块]ES6与cjs的混合开发 模块语言混合开发的原因Nodejs中使用ES6关于动态加载的讲解 项目的模块语言CJS 与 ESM 开发模块的使用方法普通模块引入json 文件的引入普通模块导出 CJS兼容ESMESM兼容CJS(推荐)全局变量--dirname-filename-esm库 问题Error: EPERM: operation not p…...
git上传项目至github(Linux)
01 git版本创建 git init 创建版本库 创建一个版本 git add test1.cpp git commit -m 说明信息 git log 查看版本记录 02 版本回退 git reset --hard HEAD^ 版本回退一个 git reset --hard HEAD^^ 版本回退二个 git reset --hard 版本号 版本回退到指定版本࿰…...
SSH 远程登录 WSL
更新ssh设置 sudo apt-get update sudo apt-get remove openssh-server sudo apt-get install openssh-server 编辑网络配置 sudo vi /etc/ssh/sshd_config (1)修改ssh服务监听端口和监听地址 注意:为了个人的安全,还是建议换…...
每天一道算法题:40. 组合总和 II
难度 中等 题目 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidat…...
Centos7安装PostgreSQL 14
环境: Centos7安装PostgreSQL_14版本数据库; 打开官方网站:PostgreSQL: Linux downloads (Red Hat family) 一、 版本选择 复制、粘贴并运行如下脚本: 二、安装步骤 这些命令是在 CentOS 7.x 系统上安装和配置 PostgreSQL 14 的步…...
Shopee的折扣活动怎么分类?shopee设置折扣注意事项
旺季到来,Shopee会举办一些折扣活动来吸引客户,那么shopee的折扣活动怎么分类,shopee设置折扣注意事项? shopee的折扣活动怎么分类? 满减活动:满减活动是虾皮常见的一种折扣形式。在这种活动中࿰…...
磁盘空间占用巨大的meta.db-wal文件缓存(tracker-miner-fs索引服务)彻底清除办法
磁盘命令参考本博客linux磁盘空间满了怎么办. 问题: 磁盘空间被盗 今天瞄了一下我的Ubuntu系统盘, nftdiggernftdigger-Ubuntu:~$ df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 16G 0 16G 0% /dev tmpfs 3.2G 1.9…...
一键释放30GB空间!Windows Cleaner让C盘爆红彻底成为历史
一键释放30GB空间!Windows Cleaner让C盘爆红彻底成为历史 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为C盘爆红而焦虑吗?Windows …...
重构设计工作流:HTML到Figma的智能转换技术解析
重构设计工作流:HTML到Figma的智能转换技术解析 【免费下载链接】figma-html Convert any website to editable Figma designs 项目地址: https://gitcode.com/gh_mirrors/fi/figma-html 在数字产品开发的现代工作流中,设计与代码之间的鸿沟一直是…...
2025届必备的十大降AI率助手推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低文章那种显露出是人工智能生成的感觉,得从词汇、句法以及逻辑结构这三个方…...
GLM-OCR驱动微信小程序开发:拍照取字与实时翻译
GLM-OCR驱动微信小程序开发:拍照取字与实时翻译 你有没有遇到过这样的场景?看到一份外文菜单、一份产品说明书,或者一份手写的笔记,想要快速提取上面的文字并翻译成中文,却只能一个字一个字地敲,或者来回切…...
mysql如何给已有数据表添加索引_使用CREATE INDEX提升查询速度
MySQL建索引需严格校验语法、字段与表名;优先用ALTER TABLE ADD INDEX;复合索引顺序须匹配查询条件;避免冗余索引;大表操作选低峰期;唯一索引承载约束语义;建索引后需ANALYZE TABLE更新统计信息。CREATE IN…...
告别document.querySelector!在Vue3中用ref优雅操作DOM的3个实战场景
告别document.querySelector!在Vue3中用ref优雅操作DOM的3个实战场景 在Vue3的生态中,模板ref早已超越了简单的DOM引用工具,成为连接响应式数据与命令式DOM操作的桥梁。许多开发者仍习惯性地在setup中写下document.querySelector——这就像用…...
从 GPT-6 “Spud“ 闹剧看 AI 圈的信息不对称现象
4月14日,全世界都在等一个不存在的发布会。 一场精心酝酿的"空气发布会" 4月14日那天,科技圈的预期被拉到了顶点,结果却是一场巨大的“鸽子”。这种“什么都没发生”本身,成了当天最值得观察的现象。 事情的起因要追溯…...
3大零代码平台教你用AI智能体,轻松实现自动化效率提升!
本文介绍了AI智能体的概念及其与普通AI聊天工具的区别,推荐了三个零代码平台:扣子、腾讯元器和文心智能体,并详细阐述了如何利用这些平台搭建智能体。文章重点介绍了腾讯元器在微信生态中的应用,以及扣子在复杂工作流自动化方面的…...
告别蓝绿失真!用Water-Net(TensorFlow 1.13.1)实战水下图像增强,从环境配置到效果测试保姆级教程
水下图像增强实战:用Water-Net消除蓝绿偏色的完整指南 每次潜水归来,看着相机里那些被海水"吃掉"色彩的模糊照片,总让人感到遗憾。水下摄影爱好者、海洋生物研究者或是水下工程检测人员,都面临着一个共同的难题——如何…...
【仅限头部科技公司内部使用的】个性化适配策略矩阵(含12个行业模板+5类敏感代码拦截规则)
第一章:智能代码生成个性化适配策略 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成已从通用模板输出迈向深度个性化适配阶段。开发者背景、项目约束、团队规范与运行时环境共同构成多维适配边界,单一模型输出无法满足真实工程场景的差异化…...
