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

Bean的三级缓存

Spring开发中,Bean A依赖Bean B、Bean B依赖Bean A的「循环依赖」,若不处理会导致容器启动失败。而单例Bean的循环依赖能被优雅解决,核心就是「三级缓存」机制——通过分层存储不同状态的Bean引用,提前暴露未完全初始化的Bean,打破循环死锁。

一、Bean循环依赖的核心分类

循环依赖是Bean依赖形成闭环,Spring对其支持有明确限制,仅单例+Setter/字段注入可通过三级缓存解决:

  • Setter/字段注入(单例):最常见,三级缓存可完美解决。

  • 构造器注入:无法解决,实例化阶段就需依赖,无可用早期引用。

  • 原型作用域:无法解决,原型Bean每次创建新实例,无缓存条件。

二、Bean三级缓存核心解析

三级缓存是DefaultSingletonBeanRegistry类中的三个Map,分层存储不同状态的单例Bean,逐步过渡至完全初始化状态。

缓存级别

源码名称

存储内容

核心作用

一级缓存

singletonObjects

完全初始化的成品Bean

提供可直接使用的单例Bean

二级缓存

earlySingletonObjects

已实例化、未初始化的早期引用

缓存早期引用,提升效率

三级缓存

singletonFactories

生成早期引用的ObjectFactory

解决AOP代理循环依赖,避免AOP失效

缓存流转:三级缓存→二级缓存→一级缓存,Bean初始化完成后存入一级缓存,清理对应二、三级缓存数据。

三、三级缓存解决循环依赖流程

以A、B单例Setter注入循环依赖为例,核心流程如下(需启用循环依赖支持:Spring Boot 2.6+配置spring.main.allow-circular-references=true):

  1. 初始化Bean A:调用构造方法实例化A,将生成A早期引用的工厂存入三级缓存;

  2. A注入B:容器发现A依赖B,触发B的初始化;

  3. 初始化Bean B:实例化B后,将其工厂存入三级缓存,随后B需注入A;

  4. B获取A的早期引用:容器从三级缓存取出A的工厂,生成A的早期引用存入二级缓存,注入B;

  5. B初始化完成:B完成属性注入和初始化,存入一级缓存,注入A;

  6. A初始化完成:A完成注入,存入一级缓存,循环打破。

四、关键总结

1. 三级缓存的核心价值:解决单例+Setter/字段注入的循环依赖,兼顾AOP代理的正确性;

2. 二级缓存无法替代三级缓存:三级缓存的工厂可延迟生成AOP代理对象,避免代理失效;

3. 注意事项:构造器注入、原型Bean的循环依赖无法解决,需避免此类场景或通过手动注入规避。

http://www.jsqmd.com/news/649994/

相关文章:

  • Pixel Couplet Gen一文详解:8-bit UI引擎+ModelScope大模型协同逻辑
  • Matlab网格线定制与布局优化实战指南
  • Win11Debloat:轻松清理Windows系统预装软件的终极解决方案
  • 如何构建企业级Spring Boot OAuth2单点登录系统:完整实战指南
  • 盘点靠谱的民间借贷纠纷律所,看看胜诉率高的货款纠纷律师推荐哪家 - 工业品网
  • ARM嵌入式矩阵键盘扫描:从S3C2410寄存器操作到快速键值解析实战
  • 如何在5分钟内让GitHub界面全面中文化:终极免费解决方案
  • 别再只会用摄像头录屏了!用Python+OpenCV的VideoWriter,5分钟搞定视频合成与保存
  • YimMenu终极指南:如何用开源工具保护你的GTA5在线体验
  • 2026雅思机考软件推荐:有写作批改的雅思机考软件实测 - 品牌2026
  • 从原理到实战:贝叶斯优化如何革新机器学习调参
  • HarmonyOS 华为账号头像与昵称授权:一站式集成与安全实践指南
  • 2026年郑州航空港区家电维修、冷库工程与制冷设备一站式服务深度选购指南 - 精选优质企业推荐榜
  • 微信聊天记录备份恢复终极解决方案:WechatBakTool使用指南
  • STM32F103 基于LSI时钟的RTC周期性唤醒与待机模式功耗优化实践(附标准库代码)
  • 视频解密神器:3步搞定DRM加密视频,重新掌控你的数字内容
  • vi编辑器的简单操作
  • Win11系统优化终极指南:如何用Win11Debloat让电脑重获新生
  • 3步解锁小爱音箱全能音乐中心:告别版权限制的自由听歌方案
  • 从PointNet++到SoftGroup:3D点云分割算法演进与实战解析
  • 2026年郑州航空港区家电维修与冷库服务一站式解决方案深度指南 - 精选优质企业推荐榜
  • 细节控狂喜:圣女司幼幽-造相Z-Turbo在角色细节刻画上的表现
  • 给DSP C6000系列扩展内存:手把手配置EMIF连接SDRAM与Flash(附时序计算避坑指南)
  • TQVaultAE终极指南:解锁泰坦之旅无限仓库与装备管理神器
  • 网盘直链下载助手:八大平台高速下载的终极解决方案
  • 阿里开源视频生成新标杆!Wan2.1-14B-T2V-FusionX-VACE实战指南:从环境配置到创意应用
  • Towards Comprehensive Lecture Slides Understanding: Large-scale Dataset and Effective Method
  • 2026年贵州初中毕业选职校,这所央企公办职业学校凭什么稳居前列? - 深度智识库
  • 用Kuikly构建鸿蒙App的系统化开发实践指南
  • 英雄联盟智能工具箱League-Toolkit:提升游戏效率的终极解决方案