好,这一篇我直接按**“面试官视角 + 标准答案模板”**来给你整理,
属于那种——背下来就能答、理解了还能追问也不怕的版本 👌
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 | 事务拦截器 |
| DataSourceTransactionManager | JDBC 事务 |
💥 回滚规则(高频)
- 默认:RuntimeException / Error
- Checked Exception 不回滚(除非配置)
@Transactional(rollbackFor = Exception.class)
三、事务失效的常见场景(必问 ⭐⭐⭐)
1️⃣ 方法内部调用(最经典)
public void A() {
B(); // 事务不生效
}
@Transactional
public void B() {}
❌ 原因:绕过代理对象
2️⃣ 方法不是 public
@Transactional
private void test() {}
❌ 原因:代理无法增强
3️⃣ 异常被吞掉
try {
...
} catch (Exception e) {
}
❌ Spring 感知不到异常
4️⃣ 抛出非 RuntimeException
throw new Exception();
❌ 默认不回滚
5️⃣ Bean 未交给 Spring 管理
new UserService()
✅ 面试总结一句话
事务依赖代理,只要绕过代理,事务就会失效
四、Spring 中循环引用怎么解决?
🎯 什么是循环依赖?
A → B
B → A
🔧 Spring 解决方案(三级缓存)
| 缓存 | 作用 |
|---|---|
| 一级缓存 | 完整 Bean |
| 二级缓存 | 半成品 Bean |
| 三级缓存 | Bean 工厂(代理) |
🧠 解决过程简述(面试版)
- 创建 A(放入三级缓存)
- A 依赖 B → 创建 B
- B 依赖 A → 从三级缓存拿 A 的早期引用
- 注入完成
📌 只解决单例 + setter 注入
❌ 解决不了的情况
- 构造器注入
- 多例 Bean
五、Spring Boot 自动配置原理(必问 ⭐⭐⭐)
🎯 一句话总结
Spring Boot 通过 @EnableAutoConfiguration,
自动加载符合条件的配置类,实现“约定大于配置”。
🔧 核心注解链路
@SpringBootApplication
↓
@EnableAutoConfiguration
↓
@Import(AutoConfigurationImportSelector)
📦 自动配置怎么找到的?
- 读取:
META-INF/spring.factories
- 加载:
xxxAutoConfiguration
- 条件判断:
@ConditionalOnClass
@ConditionalOnBean
@ConditionalOnProperty
💡 面试官追问点
为什么引入 starter 就能用?
👉 starter = 依赖 + 自动配置
六、Spring 常见注解速查(必背)
🧩 组件注解
| 注解 | 作用 |
|---|---|
| @Component | 通用 |
| @Service | 业务层 |
| @Repository | DAO |
| @Controller / @RestController | 控制层 |
🔁 依赖注入
| 注解 | 说明 |
|---|---|
| @Autowired | 按类型 |
| @Qualifier | 指定名称 |
| @Resource | JDK 注解 |
🔐 事务 / AOP
@Transactional
@Aspect
@Before
@Around
🌱 Spring Boot
@SpringBootApplication
@ConfigurationProperties
@EnableConfigurationProperties
七、SSM 面试速背总结(终极版)
AOP 靠代理
事务是 AOP 的一种
事务失效 = 绕过代理
循环依赖靠三级缓存
Boot 自动配置靠条件注解
八、下一步我可以继续帮你 🚀
你如果愿意,我可以直接:
- 🔥 模拟 真实面试官追问(连环问)
- 🧠 画一版 Spring 核心原理脑图
- 🧪 拆解 源码级事务 & AOP 流程
- 📄 给你一份 SSM 高频面试答题模板
你是准备 近期面试冲刺,还是 系统性补原理?