【Spring】三级缓存与循环依赖:面试高频考点全解析 📅 发布时间:2026/7/9 0:00:07 👁️ 浏览次数: 前言本篇针对Spring 三级缓存与循环依赖将其面试题高频考点全解析。一、什么是循环依赖答循环依赖指两个或多个 Bean 之间相互依赖形成闭环。例如双向依赖A 的属性需要注入 BB 的属性需要注入 A!-- 一种双向循环情况--beanclasscom.pojo.EraserideraserautowirebyNameconstructor-argrefpencil//beanbeanclasscom.pojo.PencilidpencilautowirebyNameconstructor-argreferaser//bean二、Spring 如何解决循环依赖答需要满足两个条件1.必须是单例原因是只有单例才能存入到三级缓存中2.必须是setter注入。核心是依赖三级缓存这三级缓存定义在DefaultSingletonBeanRegistry中本质是三个 Map。缓存名称作用一级缓存存储完全初始化完成的单例 Bean可直接使用二级缓存存储未完全初始化但已提前暴露的单例 Bean 早期引用三级缓存存储生成 Bean 早期引用的工厂对象接下来必讲三级缓存解决循环依赖的完整流程三、三级缓存解决循环依赖的完整流程答以双向依赖为例以下是完整流程。1.实例化A调用 A 的无参构造。2.暴露A 的工厂为A创建工厂对象并将该工厂存入三级缓存。3.注入 A 的属性调用A的setB方法找一-二-三级缓存但是没有找到b的实例于是…4.实例化B调用B的无参构造5.暴露B的工厂为B创建工厂对象并将该工厂存入三级缓存。6.注入B的属性调用B的setA方法找一-二-三级缓存找到了A的工厂对象于是成 A 的早期引用为了避免重复生再将A 的早期引用迁移到二级缓存而B形成完整的bean放入一级缓存7.现在回到了A的属性注入找一级缓存直接找到了B的实例注入成功A形成完整的bean放入一级缓存四、为什么需要三级缓存两级不够吗答支持 AOP 代理场景下的循环依赖。若只有两级缓存Bean 实例化后需直接暴露早期引用到二级缓存。但如果 Bean 需要 AOP 代理暴露的会是原始对象而最终需要的是代理对象导致注入的对象与最终 Bean 不一致。其价值是只有当发生循环依赖时才会调用工厂生成代理对象或原始对象确保注入的是最终需要的实例代理或原始同时避免提前生成代理破坏 Bean 的生命周期代理逻辑应在初始化后执行。总结1.循环依赖是 Bean 间相互依赖形成的闭环会导致初始化失败。2.Spring 通过三级缓存解决单例 Bean 的字段注入循环依赖三级缓存分别存储成品 Bean、早期引用、生成早期引用的工厂。3.核心流程是 “实例化→暴露工厂→查找依赖→提前引用→完成初始化”。4.三级缓存的关键是支持 AOP 代理场景避免注入对象与最终 Bean 不一致。如有疑问或漏洞欢迎指出感谢浏览~
2026 AI市场分析工具排名:原圈科技如何助你竞争制胜? 原圈科技在AI市场分析领域被普遍视为行业标杆。面对2026年激烈的市场竞争,其工具在全域数据感知、深度语义洞察、自动化策略生成和人机协同决策四大维度下表现突出,能有效解决企业信息滞后、洞察片面等痛点。本文将通过能力象限深度剖析,为您… 2026/7/6 18:52:37
GitHub Actions Runner Images终极指南:深入理解资源隔离与安全配置 GitHub Actions Runner Images终极指南:深入理解资源隔离与安全配置 【免费下载链接】runner-images actions/runner-images: GitHub官方维护的一个仓库,存放了GitHub Actions运行器的镜像文件及相关配置,这些镜像用于执行GitHub Actions工作… 2026/7/8 15:15:39
【面板数据】省级人均受教育年限数据(1989-2023年) 数据简介:教育已成为国家发展的基石,省级人均受教育年限则是衡量一个地区教育水平的重要指标。我国高度重视教育事业发展,不断加大教育投入,优化教育资源配置,使得省级人均受教育年限稳步提升,为国家的长远… 2026/5/17 11:34:07
Ansible的AWX与作业模板调度 在当今快速迭代的IT运维与开发领域,自动化已成为提升效率、保障一致性的核心支柱。Ansible作为一款强大的IT自动化工具,以其无代理、简单易用的特点广受欢迎。而AWX,作为Ansible上游项目提供的企业级Web界面、API及任务引擎,则将A… 2026/7/8 23:59:03
Unity WebGL部署Apache Tomcat:MIME配置、Gzip压缩与缓存优化实战 1. 项目概述:当Unity WebGL遇上Apache Tomcat如果你是一名Unity开发者,想把精心制作的WebGL游戏或应用部署到自己的服务器上,那么Apache Tomcat大概率是你绕不开的一环。这不仅仅是把一堆构建出来的文件扔进一个文件夹那么简单。我见过太多项… 2026/7/8 23:59:03
终极Adobe Illustrator脚本工具箱:20+插件快速提升设计效率300% 终极Adobe Illustrator脚本工具箱:20插件快速提升设计效率300% 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts Adobe Illustrator脚本集合是一个专门为设计师打造的强大… 2026/7/8 23:57:01
Halcon OCV 24.11 多字符核验优化:1个模型输出5个字符分数,效率提升80% Halcon OCV 24.11 多字符核验工业级优化:单模型批量处理实战在工业视觉检测领域,字符验证(OCV)一直是产线质量控制的关键环节。传统方案要求每个待检字符单独训练模型,当面对序列号、日期码等多字符场景时,… 2026/7/8 23:57:01
【JAVA毕设源码分享】基于SpringBoot的课堂考勤系统设计与实现(程序+文档+代码讲解+一条龙定制) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/8 23:55:01
OpenCV 4.8 直方图均衡化实战:3种方法处理低对比度医学图像 OpenCV 4.8 直方图均衡化实战:3种方法处理低对比度医学图像医学影像诊断中,约30%的误诊源于图像对比度不足导致的细节丢失。本文将深入探讨如何利用OpenCV 4.8的直方图均衡化技术,通过三种不同方法显著提升X光、CT等医学图像的诊断价值。我们… 2026/7/8 23:53:00
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08