news 2026/4/23 6:09:57

Java 面试篇-SSM 框架专题(什么是 AOP?Spring 中事务时如何实现的?事务失效的场景?Spring 中循环引用怎么解决?Springboot 的自动配置原理?Spring 常见注解?)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 面试篇-SSM 框架专题(什么是 AOP?Spring 中事务时如何实现的?事务失效的场景?Spring 中循环引用怎么解决?Springboot 的自动配置原理?Spring 常见注解?)

好,这一篇我直接按**“面试官视角 + 标准答案模板”**来给你整理,
属于那种——背下来就能答、理解了还能追问也不怕的版本 👌


Java 面试篇|SSM 框架专题速通

定位
适合1–3 年 Java 后端面试,覆盖 Spring / Spring MVC / Spring Boot 高频问题


一、什么是 AOP?(必问)

✅ 标准定义(面试版)

AOP(面向切面编程)
不修改原有业务代码的情况下,对方法进行横切增强,如日志、事务、权限等。


🔧 核心思想

主业务逻辑 + 日志 + 事务 + 权限

👉 抽出来,统一管理


🧱 AOP 核心概念(必须会)

概念说明
Aspect切面
JoinPoint连接点(方法)
Pointcut切点(规则)
Advice通知(增强逻辑)
Proxy代理对象

🔍 Spring AOP 底层实现

  • JDK 动态代理(有接口)
  • CGLIB(无接口)

📌 面试加分:

Spring 默认有接口用 JDK,没有用 CGLIB


二、Spring 中事务是如何实现的?

🎯 一句话答案(高分)

Spring 事务是基于AOP + 代理机制,在方法执行前后自动控制事务的开启、提交和回滚。


🔄 执行流程

@Transaction ↓ 代理对象 ↓ 开启事务 ↓ 执行业务方法 ↓ 异常?回滚:提交

🔧 核心组件

组件作用
PlatformTransactionManager事务管理器
TransactionInterceptor事务拦截器
DataSourceTransactionManagerJDBC 事务

💥 回滚规则(高频)

  • 默认:RuntimeException / Error
  • Checked Exception 不回滚(除非配置)
@Transactional(rollbackFor=Exception.class)

三、事务失效的常见场景(必问 ⭐⭐⭐)

1️⃣ 方法内部调用(最经典)

publicvoidA(){B();// 事务不生效}@TransactionalpublicvoidB(){}

❌ 原因:绕过代理对象


2️⃣ 方法不是 public

@Transactionalprivatevoidtest(){}

❌ 原因:代理无法增强


3️⃣ 异常被吞掉

try{...}catch(Exceptione){}

❌ Spring 感知不到异常


4️⃣ 抛出非 RuntimeException

thrownewException();

❌ 默认不回滚


5️⃣ Bean 未交给 Spring 管理

newUserService()

✅ 面试总结一句话

事务依赖代理,只要绕过代理,事务就会失效


四、Spring 中循环引用怎么解决?

🎯 什么是循环依赖?

A → B B → A

🔧 Spring 解决方案(三级缓存)

缓存作用
一级缓存完整 Bean
二级缓存半成品 Bean
三级缓存Bean 工厂(代理)

🧠 解决过程简述(面试版)

  1. 创建 A(放入三级缓存)
  2. A 依赖 B → 创建 B
  3. B 依赖 A → 从三级缓存拿 A 的早期引用
  4. 注入完成

📌只解决单例 + setter 注入


❌ 解决不了的情况

  • 构造器注入
  • 多例 Bean

五、Spring Boot 自动配置原理(必问 ⭐⭐⭐)

🎯 一句话总结

Spring Boot 通过@EnableAutoConfiguration
自动加载符合条件的配置类,实现“约定大于配置”。


🔧 核心注解链路

@SpringBootApplication@EnableAutoConfiguration@Import(AutoConfigurationImportSelector)

📦 自动配置怎么找到的?

  1. 读取:
META-INF/spring.factories
  1. 加载:
xxxAutoConfiguration
  1. 条件判断:
@ConditionalOnClass@ConditionalOnBean@ConditionalOnProperty

💡 面试官追问点

为什么引入 starter 就能用?

👉 starter = 依赖 + 自动配置


六、Spring 常见注解速查(必背)

🧩 组件注解

注解作用
@Component通用
@Service业务层
@RepositoryDAO
@Controller / @RestController控制层

🔁 依赖注入

注解说明
@Autowired按类型
@Qualifier指定名称
@ResourceJDK 注解

🔐 事务 / AOP

@Transactional@Aspect@Before@Around

🌱 Spring Boot

@SpringBootApplication@ConfigurationProperties@EnableConfigurationProperties

七、SSM 面试速背总结(终极版)

AOP 靠代理
事务是 AOP 的一种
事务失效 = 绕过代理
循环依赖靠三级缓存
Boot 自动配置靠条件注解


八、下一步我可以继续帮你 🚀

你如果愿意,我可以直接:

  • 🔥 模拟真实面试官追问(连环问)
  • 🧠 画一版Spring 核心原理脑图
  • 🧪 拆解源码级事务 & AOP 流程
  • 📄 给你一份SSM 高频面试答题模板

你是准备近期面试冲刺,还是系统性补原理

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 6:12:51

系统学习OpenAMP框架:适合新手的完整学习路径

以下是对您提供的博文内容进行 深度润色与结构化重构后的技术文章 。整体风格更贴近一位资深嵌入式系统工程师在技术社区中的真实分享:语言自然、逻辑层层递进、重点突出实战细节,去除了AI生成常见的模板化表达和空泛术语堆砌,强化了“人话解释+工程直觉+踩坑经验”的融合…

作者头像 李华
网站建设 2026/4/23 11:27:33

AI如何帮你快速找到GIF出处?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个基于AI的GIF出处查询工具,用户上传GIF或输入GIF链接,系统通过图像识别技术分析GIF的关键帧,提取特征后与互联网上的资源进行匹配&#…

作者头像 李华
网站建设 2026/4/23 11:28:11

传统开发vsAI生成:计时器应用开发效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 生成一个专业级的计时器应用代码,要求:1. 实现精确到毫秒的计时功能 2. 支持多计时器同时运行 3. 可视化计时进度展示 4. 数据统计功能 5. 主题切换。代码结…

作者头像 李华
网站建设 2026/4/23 10:47:10

如何提升出图质量?Z-Image-Turbo参数调优建议

如何提升出图质量?Z-Image-Turbo参数调优建议 Z-Image-Turbo不是那种“点一下就出图,好坏全凭运气”的模型。它像一台精密调校过的相机——默认设置能拍出好照片,但真正决定画质上限的,是那些你主动调整的参数。很多用户反馈“生…

作者头像 李华
网站建设 2026/4/23 11:38:46

用CHOWN构建安全文件共享原型系统

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个Python脚本原型,模拟多用户文件共享系统。要求:1) 创建测试用户和组;2) 设置共享目录;3) 使用CHOWN实现权限转移&#xff1…

作者头像 李华
网站建设 2026/4/23 11:34:01

从冒泡排序到快速排序:效率提升500%的秘诀

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个算法效率对比工具:1. 实现冒泡排序和快速排序两种算法 2. 生成测试数据集(100-10000个随机数)3. 自动测量并对比两种算法的执行时间 4.…

作者头像 李华