Spring AOP 的实现原理?
发布于
一、AOP 概念
面向切面编程,把横切逻辑(日志、事务、权限)从业务代码中抽离,通过动态织入实现。
二、动态代理
- JDK 动态代理:目标类实现接口时使用,基于反射生成代理类。
- CGLIB 代理:目标类无接口时使用,基于 ASM 生成目标类的子类。
Spring 自动选择:有接口用 JDK,无接口用 CGLIB;也可强制 CGLIB。
三、核心概念
- JoinPoint:连接点,可被拦截的方法。
- Pointcut:切点,定义哪些方法被拦截。
- Advice:通知,拦截后执行的逻辑(before/after/around/afterReturning/afterThrowing)。
- Aspect:切面,切点 + 通知。
四、事务
@Transactional 基于 AOP 实现,默认只对 RuntimeException 回滚。