1.SpringAOP的原理了解吗
Spring AOP 的核心在于 —— 动态代理(Dynamic Proxy)。 ✅ 在不修改原有业务逻辑的前提下,为代码统一地增强功能 它主要有两种实现方式:
| 代理方式 | 底层机制 | 特点 |
|---|---|---|
| JDK 动态代理 | 基于 Java 自带的 Proxy 类 | 只对实现了接口的类生效 |
| CGLIB 代理 | 基于字节码继承(生成子类) | 可代理普通类(无接口) |
Spring 会自动判断用哪种:
- 如果类实现了接口 → 用 JDK 动态代理;
- 否则 → 用 CGLIB 代理。
代理对象 → 调用切面逻辑 → 再调用真实方法 → 返回结果
2.SpringAOP的核心概念
| 名称 | 含义 |
|---|---|
| 切面(Aspect) | 封装横切逻辑的类(比如日志、缓存、事务) |
| 连接点(Join Point) | 可以被拦截的方法(Spring 默认是方法级) |
| 切入点(Pointcut) | 定义要拦截哪些方法 |
| 通知(Advice) | 在方法执行前、后、抛异常时执行的代码 |
| 目标对象(Target Object) | 被代理的原始对象 |
| 织入(Weaving) | 将切面逻辑与目标对象“编织”在一起的过程 |
| 代理对象(Proxy Object) | 增强后的对象,Spring 返回的实际上是它 |
3.有哪些基于AOP的注解
| 功能 | 框架注解 | 说明 |
|---|---|---|
| 事务管理 | @Transactional | 方法执行前后自动提交/回滚事务 |
| 缓存管理 | @Cacheable, @CacheEvict | 自动缓存/清理 |
| 日志记录 | 自定义切面 | 打印请求参数、执行时间 |
| 权限控制 | @PreAuthorize | 方法调用前检查权限 |