大家好,我是锋哥。今天分享关于【Java高频面试题:Spring-AOP通知和执行顺序?】面试题。希望对大家有帮助;

Java高频面试题:Spring-AOP通知和执行顺序?
1️⃣ Spring AOP 中的通知类型
在 Spring AOP 中,通知主要有以下几种类型:
-
前置通知(Before Advice)
- 方法执行前执行。
- 用于权限检查、日志打印等。
- 不会影响目标方法执行结果。
-
后置通知(After Returning Advice)
- 方法正常返回后执行。
- 可以获取目标方法的返回值。
- 适合做结果处理、日志记录等。
-
异常通知(After Throwing Advice)
- 方法抛出异常时执行。
- 用于异常处理、日志记录异常信息等。
-
最终通知(After Advice / After Finally)
- 方法执行完成后执行,无论方法是否抛异常。
- 类似
finally,用于资源清理、日志记录等。
-
环绕通知(Around Advice)
- 方法执行前后都可以处理。
- 可以决定是否执行目标方法,甚至修改返回值。
- 功能最强大,但实现也最复杂。
2️⃣ Spring AOP 通知执行顺序
假设有一个目标方法 targetMethod(),且同时存在多种通知,执行顺序如下:
- 环绕通知的前半部分(Around Before)
- 前置通知(Before)
- 目标方法(Target Method)
- 环绕通知的后半部分(Around After)
- 后置通知(After Returning,若无异常)
- 异常通知(After Throwing,若有异常)
- 最终通知(After / After Finally)
可以用图示理解:
环绕通知(前) ─► 前置通知 ─► 目标方法 ─► 环绕通知(后) ─► 后置通知
└─► 异常通知(若抛异常)
└─► 最终通知(After Finally)
3️⃣ 注意点
-
环绕通知可以完全控制目标方法执行
Object result = proceedingJoinPoint.proceed(); // 执行目标方法 -
异常处理顺序
- 如果目标方法抛异常,后置通知不会执行,但异常通知和最终通知会执行。
-
多个通知的优先级
- Spring AOP 默认按 配置顺序或
@Order注解 决定执行顺序。 - 越小的
@Order值优先执行(前置/环绕前)或后执行(环绕后/后置)。
- Spring AOP 默认按 配置顺序或