当前位置: 首页 > news >正文

spring三级缓存

三级缓存分别是:一级缓存初始化后的bean,二级缓存bean的早期应用即刚实例化没有依赖注入的bean,三级缓存的是bean工厂。

假设AB循环依赖,A在创建过程中发现需要B,转而去创建B;B在创建过程中发现需要A,此时获取到A的早期引用注入到B中,B完成创建后,A再注入完整的B,从而解决循环依赖。

理论上一级二级就能解决循环依赖,而第三级是为了处理aop代理的情况。

Spring三级缓存详解

Spring在DefaultSingletonBeanRegistry中维护了三个缓存,用于存储不同阶段的Bean:

一级缓存:singletonObjects

  • 存储对象:完全初始化好的单例Bean

  • 特点:Bean已经完成了实例化、属性注入、初始化,可以直接使用

  • 数据结构Map<String, Object>

二级缓存:earlySingletonObjects

  • 存储对象:提前暴露的早期Bean(还未完成属性注入和初始化)

  • 特点:Bean已经实例化,但还未进行属性填充和初始化,解决的是"提前暴露"的问题

  • 数据结构Map<String, Object>

三级缓存:singletonFactories

  • 存储对象:单例Bean工厂

  • 特点:存放的是ObjectFactory,可以生成早期Bean的引用

  • 数据结构Map<String, ObjectFactory<?>>

工作流程示例

假设A依赖B,B依赖A:

  1. 创建A:实例化A,将A的ObjectFactory放入三级缓存

  2. 填充A:发现需要B,去创建B

  3. 创建B:实例化B,将B的ObjectFactory放入三级缓存

  4. 填充B:发现需要A,从三级缓存获取A的ObjectFactory,生成A的早期引用放入二级缓存,注入到B

  5. B完成初始化:B初始化完成后放入一级缓存

  6. A继续初始化:A从一级缓存获取B,完成属性注入和初始化,放入一级缓存

是否还要手动解决循环依赖

Spring的三级缓存已经帮我们解决了绝大多数的循环依赖问题,日常开发中你不需要手动干预。但在构造器注入、原型Bean等特殊场景下,仍然需要注意避免循环依赖的产生。最好的实践是尽量避免循环依赖,因为它往往暗示着设计上可能存在一些问题。

http://www.cnnetsun.cn/news/1879518.html

相关文章:

  • Janus-Pro-7B作品分享:国风插画、科技感UI、儿童绘本三种风格文生图对比
  • 终极指南:如何用命令行工具轻松备份你的iCloud照片库 [特殊字符]
  • StructBERT语义相似度分析:小白也能快速上手的本地化解决方案
  • AUTOSAR DEM配置实战:从事件检测到DTC存储,一个真实ECU诊断案例的完整解析
  • 记一次 OKE 集群上的 TCP 流量黑洞排查与解决全过程
  • Redis 菜鸟学习
  • 别再死记硬背ESP32 BLE API了!用这个“事件驱动”思维导图,5分钟理清GAP/GATT回调逻辑
  • 44、链表和数组有什么区别?
  • NaViT实战:如何用Patch n‘ Pack技术处理任意分辨率图像(附代码示例)
  • M2LOrder模型实战:赋能AIGC内容创作的情感一致性校验
  • 告别枯燥文本!用像素语言·维度裂变器一键生成10种创意文案
  • Pixel Couplet Gen 从零部署教程:Ubuntu系统环境与依赖项全配置
  • K-Means聚类在图像分割中的优化实践:从理论到代码实现
  • M7iBASE-AC-1GE直流电源路由器
  • Keil5实战:手把手教你制作自定义FLM插件(附完整驱动配置流程)
  • AI超清画质增强问题解决:大图片处理、内存优化等实战技巧
  • Pi0机器人控制实战:多视角图像输入与动作生成案例
  • AIAgent机器人控制如何突破“感知-决策-执行”延迟瓶颈?2026奇点大会实测数据显示端到端时延压降至87ms以下
  • Qwen2.5-VL视频分析案例:长视频关键事件定位与摘要生成
  • 卡内基梅隆大学团队破解“手机语音助手为什么听不懂外国腔“之谜
  • 量子力学的太极效应
  • RVC语音克隆新手教程:3分钟极速训练,AI翻唱轻松上手
  • 快速上手nli-distilroberta-base:开箱即用的自然语言推理工具
  • 别再为接线发愁!手把手教你搞定西门子S7-1200 PTO脉冲轴与台达A2伺服驱动器的24V/5V信号匹配
  • Plan-and-Execute:Agent规划与执行分离模式
  • 海上搜救(SAR)小目标检测打造 海上搜救小目标检测数据集 深度学习YOLOv8 的完整训练代码 无人机航拍+水上漂浮物检测(人、船、冲浪板等)海上搜救检测数据集
  • 交警机器人上岗常州护航苏超揭幕战;管理者敬业度已不再高于普通员工 | 美通社一周热点简体中文稿
  • Qwen3-0.6B-FP8部署教程:vLLM服务健康检查(llm.log)、Chainlit端口映射与CORS配置
  • OpenClaw安装教程:nanobot镜像内建日志系统(llm.log)解读与异常定位方法
  • Alpamayo-R1-10B惊艳效果:多目标(车辆+行人+自行车)交互轨迹联合预测展示