首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring AOP 註解配置全攻略:從核心概念到實戰代碼

     編輯:Java 綜合教學

Spring AOP 註解配置全攻略

面向切面編程(AOP)讓橫切關注點(日誌、事務、權限、驗證)與業務邏輯解耦。Spring 基於動態代理實現 AOP,註解配置比 XML 更友好重構、錯誤更易排查。本文系統梳理核心概念、啟用方式、切點表達式、參數綁定及五大通知類型。

核心概念速覽

  • 切面:包含切點與通知的類(@Aspect)
  • 切點:定義「在哪切」的匹配規則(@Pointcut)
  • 通知:定義「切點處做什麼」的方法(@Before 等)
  • 連接點:所有可被織入的點(方法調用、異常拋出等)

啟用自動代理

@Configuration
@EnableAspectJAutoProxy  // 或 XML: <aop:aspectj-autoproxy/>
public class AppConfig {}

只有開啟自動代理,IOC 容器才會為標註 @Aspect 的 Bean 生成代理對象。

切點表達式詳解

execution(* aop.library.BookShop.sell(Book)) 匹配指定方法。常用通配符:

  • *:返回類型、包名、類名、方法名
  • ..:任意參數列表

切點表達式語法圖

切點表達式示例圖

參數綁定技巧

通過 args(paramName) 將目標方法參數傳給切點方法,再由通知方法接收:

@Pointcut("execution(* aop.library.BookShop.sell(Book)) && args(book)")
public void sell(Book book) {}

@Before("sell(book)")
public void charge(Book book) {
    System.out.println("這本書叫:" + book);
}

五大通知類型對比

類型註解執行時機典型場景
前置通知@Before目標方法前權限檢查、參數驗證
後置通知@After目標方法後(無論正常/異常)資源清理、日誌記錄
返回通知@AfterReturning正常返回後結果增強、緩存更新
異常通知@AfterThrowing拋出異常時異常統一處理、告警
環繞通知@Around完全控制目標方法執行事務管理、性能監控、緩存攔截

兩種配置方式對比

// 1. 基於切點表達式直接配置
@Before("execution(* *..*.*(..))")
public void logAll(JoinPoint jp) { ... }

// 2. 基於已定義切點引用(推薦,復用性強)
@Before("sell(book)")
public void charge(Book book) { ... }

最佳實踐建議

  1. 切點定義在專門類中,通過方法名引用,避免表達式分散
  2. 優先使用 @Around 實現事務等需完整控制流程的場景
  3. 通知方法參數盡量使用強類型(如 JoinPoint、目標參數),避免 Object[]
  4. 切面類加 @Order 或實現 Ordered 控制多切面執行順序
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved