Java高频面试题:Spring-AOP通知和执行顺序?

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

Java高频面试题:Spring-AOP通知和执行顺序?

1️⃣ Spring AOP 中的通知类型

在 Spring AOP 中,通知主要有以下几种类型:

  1. 前置通知(Before Advice)

    • 方法执行前执行。
    • 用于权限检查、日志打印等。
    • 不会影响目标方法执行结果。
  2. 后置通知(After Returning Advice)

    • 方法正常返回后执行。
    • 可以获取目标方法的返回值。
    • 适合做结果处理、日志记录等。
  3. 异常通知(After Throwing Advice)

    • 方法抛出异常时执行。
    • 用于异常处理、日志记录异常信息等。
  4. 最终通知(After Advice / After Finally)

    • 方法执行完成后执行,无论方法是否抛异常。
    • 类似 finally,用于资源清理、日志记录等。
  5. 环绕通知(Around Advice)

    • 方法执行前后都可以处理。
    • 可以决定是否执行目标方法,甚至修改返回值。
    • 功能最强大,但实现也最复杂。

2️⃣ Spring AOP 通知执行顺序

假设有一个目标方法 targetMethod(),且同时存在多种通知,执行顺序如下:

  1. 环绕通知的前半部分(Around Before)
  2. 前置通知(Before)
  3. 目标方法(Target Method)
  4. 环绕通知的后半部分(Around After)
  5. 后置通知(After Returning,若无异常)
  6. 异常通知(After Throwing,若有异常)
  7. 最终通知(After / After Finally)

可以用图示理解:

复制代码
环绕通知(前) ─► 前置通知 ─► 目标方法 ─► 环绕通知(后) ─► 后置通知
                                       └─► 异常通知(若抛异常)
                                       └─► 最终通知(After Finally)

3️⃣ 注意点

  • 环绕通知可以完全控制目标方法执行

    复制代码
    Object result = proceedingJoinPoint.proceed(); // 执行目标方法
  • 异常处理顺序

    • 如果目标方法抛异常,后置通知不会执行,但异常通知和最终通知会执行。
  • 多个通知的优先级

    • Spring AOP 默认按 配置顺序或 @Order 注解 决定执行顺序。
    • 越小的 @Order 值优先执行(前置/环绕前)或后执行(环绕后/后置)。
相关推荐
非优秀程序员7 小时前
第04章 邮箱大战,163 与 QQ 的暗战|《互联网产品恩仇录》
java·vue.js·架构
知已难寻8 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
沐晓时光8 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
文丑颜不良啊10 小时前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang11 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪11 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息11 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼12 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff13 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff13 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc