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…...
music21音乐信息检索:从海量音乐数据中提取关键特征
music21音乐信息检索:从海量音乐数据中提取关键特征 【免费下载链接】music21 music21: a Toolkit for Computer-Aided Musical Analysis and Computational Musicology 项目地址: https://gitcode.com/gh_mirrors/mu/music21 music21是一款强大的计算机辅助…...
Python金融数据自动化终极指南:5分钟掌握同花顺问财API实战技巧
Python金融数据自动化终极指南:5分钟掌握同花顺问财API实战技巧 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai PyWenCai是一个专为金融数据分析和量化投资设计的Python工具库,通过简洁的A…...
Unity URP项目里灯光一闪一闪?别慌,5分钟教你搞定Per Object Limit设置
Unity URP项目灯光闪烁终极解决方案:深入理解Per Object Limit机制 最近在Unity URP项目中调试灯光效果时,你是否遇到过这样的场景:精心布置的多个点光源在运行时却像夜店灯光一样闪烁不定?这可不是什么酷炫特效,而是…...
告别手动守护进程:NSSM命令行实战,打造稳定Windows后台服务
1. 为什么需要NSSM管理Windows后台服务 每次手动启动Python脚本或Java应用时,你是不是也遇到过这些糟心事?命令行窗口一关程序就崩溃,服务器重启后得重新登录运行,日志文件越来越大却不会自动切割。这些问题我都经历过,…...
Spring with AI (): 定制对话——Prompt模板引入
从 UI 工程师到 AI 应用架构者 13 年前,我的工作是让按钮在 IE6 上对齐; 13 年后,我用 fetch-event-source 订阅大模型的“思维流”,用 OCR 解锁图片中的文字——前端,正在成为 AI 产品的第一道体验防线。 最近&#x…...
基于认知负荷理论的职场新人算法学习策略:如何循序渐进,避免挫败感。
很多职场新人学算法,卡住的原因并不只是“自己不够聪明”。更常见的情况是:一上来就刷难题、追求速成、同时学太多概念,结果大脑像浏览器开了二十个标签页,越学越乱 😵💫从认知负荷理论看,这种…...
SITS2026私有化部署最后窗口期:仅剩62天,官方将于5月31日关闭v1.x License续订通道
第一章:智能代码生成技术:SITS2026开发工具专场 2026奇点智能技术大会(https://ml-summit.org) SITS2026 是面向下一代 AI 原生开发范式的集成式智能工具套件,深度融合大语言模型推理引擎与 IDE 行为感知层,支持上下文感知的实时…...
AI写春联实测:春联生成模型-中文-base生成效果惊艳案例
AI写春联实测:春联生成模型-中文-base生成效果惊艳案例 1. 引言:当AI遇见传统文化 春节贴春联是中国延续千年的传统习俗,一副好春联既要对仗工整,又要寓意吉祥,创作起来颇有难度。如今,AI技术让这一传统艺…...
从高危漏洞到类缺失:Apache POI依赖升级的实战避坑指南
1. 当安全告警遇上类缺失:Apache POI升级的典型困境 昨天深夜收到安全团队的紧急邮件,项目中的Apache POI组件被检测出高危漏洞。作为项目负责人,我立刻按照漏洞公告建议升级到5.0.0版本,没想到等待我的不是安全警报解除…...
从课堂到实践:DCT与DWT变换在图像压缩中的核心原理与MATLAB实现
1. 图像压缩背后的数学魔法:DCT与DWT初探 第一次接触图像压缩时,我被一个现象深深吸引:为什么一张几MB的照片压缩成JPEG后,文件大小能缩小十倍,而肉眼几乎看不出区别?这背后的秘密就藏在**离散余弦变换&…...
