AOP工作流程
- AOP 的核心流程
Spring AOP 的工作流程可以分为以下几个步骤:
(1) 定义切面(Aspect)
切面是一个模块化的横切关注点,通常包含 通知(Advice) 和 切点(Pointcut)。
通知定义了在何时(如方法执行前、后、异常时等)执行切面逻辑。
切点定义了哪些方法需要被拦截。
(2) 定义切点(Pointcut)
切点通过表达式(如 execution)匹配目标方法。
例如:execution(* com.example.service..(..)) 表示匹配 com.example.service 包下所有类的所有方法。
(3) 定义通知(Advice)
通知是切面在特定连接点(Join Point)执行的动作。
Spring AOP 支持以下通知类型:
Before Advice:在目标方法执行前执行。
After Returning Advice:在目标方法成功执行后执行。
After Throwing Advice:在目标方法抛出异常后执行。
After (Finally) Advice:在目标方法执行结束后执行,无论成功与否。
Around Advice:在目标方法执行前后都执行,可以控制方法的执行。
(4) 织入(Weaving)
织入是将切面逻辑应用到目标对象的过程。
Spring AOP 在运行时通过 动态代理 实现织入:
如果目标对象实现了接口,Spring 使用 JDK 动态代理。
如果目标对象没有实现接口,Spring 使用 CGLIB 动态代理。
(5) 创建代理对象
Spring AOP 会为目标对象创建一个代理对象。
当调用目标方法时,实际上是通过代理对象调用,代理对象会在目标方法执行前后插入切面逻辑。
(6) 执行目标方法
代理对象根据切点和通知的定义,在目标方法执行前后执行相应的切面逻辑。