复习向:Spring 7大核心面试题(IoC、循环依赖、生命周期、缓存、BeanFactory/FactoryBean、设计模式、AOP原理)
复习向Spring 7大核心面试题IoC、循环依赖、生命周期、缓存、BeanFactory/FactoryBean、设计模式、AOP原理摘要本文以面试者口吻围绕 Spring 框架最常被问的 7 个问题做结构化梳理IoC 理解、循环依赖的本质与解法、Bean 生命周期、一级缓存/二级缓存的放置与删除时机、BeanFactory 与 FactoryBean 差异、Spring 的常见设计模式、以及 AOP 的底层实现链路。目录谈谈对 Spring IoC 的理解Spring 如何解读“提前暴露对象”解决循环依赖描述一下 Bean 的生命周期Spring 中缓存的放置时间和删除时间BeanFactory 与 FactoryBean 的区别Spring 中用到的设计模式有哪些Spring AOP 底层实现原理1. 谈谈对 Spring IoC 的理解IoCInversion of Control控制反转在我理解里核心是把对象创建、依赖关系维护交给容器使用者只负责声明依赖不再手写 new 和依赖装配。1.1 IoC 解决了什么对象创建由容器根据配置/注解决定创建哪些 Bean依赖注入由容器完成字段/构造器/Setter 注入解耦与可替换同接口不同实现容器可灵活切换1.2 Spring IoC 的落地点Spring 内部通过BeanDefinition描述 Bean类型、作用域、依赖、初始化/销毁方法等通过BeanFactory更底层/ApplicationContext更上层来完成实例化、装配、生命周期管理面试总结口径我理解的 IoC 就是应用代码把“控制权”交给 Spring 容器由容器统一负责 Bean 的创建、装配、生命周期与扩展。2. Spring 是如何解读“额外循环依赖”问题循环依赖面试里说循环依赖我通常按“场景→机制→限制”来回答。2.1 循环依赖的典型场景构造器注入A(A依赖B)B(B依赖A)-无法通过提前暴露解决Setter/字段注入A - B且B - A-可以通过提前暴露三级缓存解决2.2 Spring 的核心思路提前暴露“半成品对象”当容器发现 A 正在创建但 A 被 B 依赖于是容器会先创建 A 的实例但未完成依赖注入把“半成品”放进缓存让后续注入可以拿到引用最终等 A 完成依赖注入与初始化后再把引用“补齐”到完成态这里的关键机制是 Spring 默认允许的单例循环依赖通过singletonFactories/earlySingletonObjects/singletonObjects三层缓存。2.3 三层缓存的面试口径概念级singletonObjects完整单例对象已初始化完成earlySingletonObjects提前暴露的早期对象半成品已能被注入singletonFactories用于生成早期对象的工厂常用于 AOP 场景2.4 常见限制构造器循环依赖不可用Spring 需要先有构造器参数才能 new多例prototype通常不支持循环依赖解决AOP 影响可能导致引用选择是否经过代理面试总结口径Spring 解决循环依赖的本质是对单例通过提前暴露“半成品对象”的引用让依赖注入不被卡住而构造器注入因为无法先 new 出实例所以天然不支持。3. 描述一下 Bean 的生命周期我一般从“Spring 默认单例生命周期 回调点”来讲。3.1 单例 Bean 生命周期关键阶段实例化Instantiation构造对象属性填充Populate Properties依赖注入可能触发循环依赖早期暴露Aware 回调如BeanNameAware、BeanFactoryAware等BeanPostProcessor 前置处理postProcessBeforeInitialization初始化回调InitializatonInitializingBean#afterPropertiesSetPostConstruct自定义init-methodBeanPostProcessor 后置处理postProcessAfterInitialization典型AOP 在这里为 Bean 创建代理放入缓存singletonObjects单例完成态销毁阶段Destroy容器关闭时触发DisposableBean#destroyPreDestroy自定义destroy-method面试总结口径我会把生命周期概括成实例化→注入→Aware→前置处理→初始化回调→后置处理AOP→加入单例池→容器关闭销毁。4. 缓存的放置时间和删除时间这题通常是考三级缓存什么时候 put、什么时候 clear。4.1 三级缓存放置时机单例循环依赖场景创建单例实例后把 A 的对象或其工厂放入三级缓存链路具体表现为先把生成“早期对象”的工厂放进singletonFactories若后续需要注入早期引用再从工厂拿到并放进earlySingletonObjects初始化完成后将最终对象放入singletonObjects完整态4.2 删除/清理时机初始化完成并从创建流程结束后清理singletonFactories中与该 bean 相关的工厂清理earlySingletonObjects中的早期对象引用并在内部状态上标记该 bean 已完全创建面试总结口径放置创建实例后半成品先进入三级缓存初始化完成后进入singletonObjects删除bean 完成初始化后清理earlySingletonObjects/singletonFactories。5. BeanFactory 和 FactoryBean 的区别5.1 BeanFactory 是什么Spring 容器的底层接口负责生产/管理 Bean常见实现DefaultListableBeanFactory5.2 FactoryBean 是什么一个“Bean 工厂的工厂”概念当容器发现某个 Bean 定义类型实现了FactoryBean容器不会直接返回 FactoryBean 本身而是调用FactoryBean#getObject()获取它生产的“真实 Bean”5.3 面试对比口径BeanFactory容器/工厂产出 Bean 的主体FactoryBean特殊 Bean 定义由容器调用它生成真正要注入的对象面试一句话BeanFactory 是容器FactoryBean 是容器里的一种 Bean 定义用来“生产”另一个对象。6. Spring 中用到的设计模式有哪些我一般列举“Spring 常见模式 每个模式一句话作用”。6.1 常见设计模式工厂模式BeanFactory、FactoryBeanBean 的创建与产品抽象模板方法模式生命周期回调流程比如初始化流程中固定骨架扩展点在特定回调代理模式AOP 运行期为目标对象创建代理适配器模式HandlerAdapter等思想在 Spring MVC 中常见在整体框架里也大量体现适配扩展点装饰器模式拦截器链/责任链风格的增强观察者模式ApplicationEvent及事件发布订阅面试总结口径我会把它归类为工厂/模板生命周期与创建、代理/装饰AOP 增强、观察者事件机制这些都是 Spring 的高频用法。7. Spring 的 AOP 底层实现原理我通常用链路串起来入口→匹配→拦截链→代理创建→调用时织入。7.1 关键参与者AOP相关Advisor、Advice通知、Pointcut切点BeanPostProcessorAnnotationAwareAspectJAutoProxyCreatorAOP 自动代理创建器7.2 大致实现链路概念级容器启动时AOP 相关的 BeanPostProcessor 注册创建 Bean 的过程中触发postProcessAfterInitialization根据切面信息匹配 Pointcut构建Advisor列表形成拦截器链advice - interceptor chain根据是否有接口选择代理方式有接口JDK 动态代理没接口CGLIB 代理生成子类业务方法调用时拦截器链依次执行形成 Around/Before/After 的织入效果面试总结口径Spring AOP 的本质是在 Bean 初始化后使用 BeanPostProcessor 判断是否需要代理并基于 Advisor/Advice 构建拦截器链通过 JDK/CGLIB 创建代理对象来完成方法增强。总结这 7 个问题我一般会用“概念→机制→限制/时机→面试一句话”来回答IoC把控制权交给容器循环依赖单例 setter 可通过三级缓存提前暴露半成品生命周期实例化/注入/Aware/前后置处理/初始化/销毁缓存创建后放三级缓存初始化完成后清理BeanFactory vs FactoryBean容器 vs 生产真实对象的工厂设计模式工厂/模板/代理/观察者等AOPBeanPostProcessor Advisor/Advice 拦截器链 JDK/CGLIB 代理参考方向Spring Framework 官方文档IoC 容器、AOP、Bean 生命周期《Spring 源码深度解析》相关章节DefaultSingletonBeanRegistry、AbstractAutowireCapableBeanFactory、AOP 代理创建

相关新闻

别再高价买图!海洛、Shutterstock高清原图下载方法分享

别再高价买图!海洛、Shutterstock高清原图下载方法分享

2026/10/4 9:53:56 阅读更多 →
抖音内容高效管理方案:douyin-downloader批量下载工具深度解析

抖音内容高效管理方案:douyin-downloader批量下载工具深度解析

抖音内容高效管理方案:douyin-downloader批量下载工具深度解析 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallba…

2026/10/3 15:37:40 阅读更多 →
如何实现Windows到Android的跨平台音频实时共享:AudioShare终极指南

如何实现Windows到Android的跨平台音频实时共享:AudioShare终极指南

如何实现Windows到Android的跨平台音频实时共享:AudioShare终极指南 【免费下载链接】AudioShare 将Windows的音频在其他Android设备上实时播放。Share windows audio 项目地址: https://gitcode.com/gh_mirrors/audi/AudioShare 你是否曾经想要将电脑上播放…

2026/9/30 18:17:36 阅读更多 →

最新新闻

快速设计Cache的四大支柱:容量、映射、写策略与替换算法

快速设计Cache的四大支柱:容量、映射、写策略与替换算法

1. 什么是“快速设计一个cache”——不是写个LRU就叫设计“如何快速设计一个cache”这个标题,乍看像程序员面试题,实则藏着整个计算机体系结构里最精妙又最常被低估的工程权衡。它不等于“用Python写个字典加个淘汰策略”,也不等于“在Redis里…

2026/10/4 10:37:15 阅读更多 →
用TaoToken统一Key打通Codex与嘉立创EDA:Bridge控制原理图绘制大纲

用TaoToken统一Key打通Codex与嘉立创EDA:Bridge控制原理图绘制大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:37:15 阅读更多 →
OpenClaw 跑在腾讯云上太烧钱?阶跃星辰 Step 3.5 Flash 免费额度 + TaoToken 统一 Key 实测

OpenClaw 跑在腾讯云上太烧钱?阶跃星辰 Step 3.5 Flash 免费额度 + TaoToken 统一 Key 实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 10:37:15 阅读更多 →
北邮学生10天打造7.4万星开源项目,获3000万投资

北邮学生10天打造7.4万星开源项目,获3000万投资

看到这个标题,我第一时间是愣了一下。GitHub 上 7.4 万星,10 天完成,北邮学生,盛大 3000 万投资,这几个词放在一起,放在任何一个开源爱好者眼里都属于“离谱”级别。尤其是星标数——7.4 万个 star 是什么概…

2026/10/4 10:37:15 阅读更多 →
Hermes Agent中chrome-devtools的token消耗陷阱与降本方案

Hermes Agent中chrome-devtools的token消耗陷阱与降本方案

1. 这不是Bug,是设计暴露的“隐性成本”——Hermes Agent里chrome-devtools工具为何吃掉76.5%的token你刚跑通Hermes Agent,配置好MCP协议接入,调用一个网页分析任务,结果发现:整个请求的token消耗里,光是c…

2026/10/4 10:37:15 阅读更多 →
从传统RAG到Agent智能知识库:混合检索、记忆管理与工程落地实践

从传统RAG到Agent智能知识库:混合检索、记忆管理与工程落地实践

从第一篇搭 Agent 骨架,到第二篇给 Agent 接上工具调用,这一篇我来讲点更实用的东西:把知识库从“搜索框”升级成“会自己思考的 Agent”。先说一个让我很郁闷的场景。之前帮团队做过一个传统 RAG 知识库,原理很简单——把文档切块…

2026/10/4 10:36:14 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →