Spring AOP 的实现原理?

发布于

一、AOP 概念

面向切面编程,把横切逻辑(日志、事务、权限)从业务代码中抽离,通过动态织入实现。

二、动态代理

  • JDK 动态代理:目标类实现接口时使用,基于反射生成代理类。
  • CGLIB 代理:目标类无接口时使用,基于 ASM 生成目标类的子类。

Spring 自动选择:有接口用 JDK,无接口用 CGLIB;也可强制 CGLIB。

三、核心概念

  • JoinPoint:连接点,可被拦截的方法。
  • Pointcut:切点,定义哪些方法被拦截。
  • Advice:通知,拦截后执行的逻辑(before/after/around/afterReturning/afterThrowing)。
  • Aspect:切面,切点 + 通知。

四、事务

@Transactional 基于 AOP 实现,默认只对 RuntimeException 回滚。