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

Spring AOP 切點表達式權威指南:execution 模式深度解析

     編輯:Java 相關知識

execution 表達式語法全景

Spring AOP 中最常用的 execution 切點指示符,完整語法結構:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

各部分詳細說明

部分是否必需說明常用模式
modifiers-pattern可選訪問修飾符public、protected、*
ret-type-pattern必需返回類型模式*(任意)、void、全限定類名
declaring-type-pattern可選聲明類型(類/接口全限定名)com.service.*、com..Service
name-pattern必需方法名模式*、get*、save*
param-pattern必需參數列表模式()、(..)、(*,String)
throws-pattern可選拋出異常模式throws Exception

參數模式(param-pattern)深度解析

  • ():無參方法
  • (..):任意數量、任意類型參數(最常用,含 0 參)
  • (*):恰好一個參數,類型任意
  • (*, String):兩個參數,第一個任意,第二個必須為 String
  • (java.io.Serializable, ..):第一個參數為 Serializable,其餘任意

經典實戰模式速查表

匹配目標execution 表達式說明
任意公共方法execution(public * *(..))第一個 * 為返回類型,第二個 * 為方法名
所有以 "set" 開頭的方法execution(* set*(..))返回類型任意
AccountService 接口所有方法execution(* com.xyz.service.AccountService.*(..))類全限定名 + .* 匹配所有方法
service 包下所有類的所有方法execution(* com.xyz.service.*.*(..))包路徑通配:*.* = 類.方法
service 包及子包所有類所有方法execution(* com.xyz.service..*.*(..)).. 遞歸匹配子包
特定參數類型的方法execution(* *.save(java.lang.String, ..))第一個參數為 String
帶註解的方法execution(@Transactional * *(..))配合 @Annotation 使用

進階技巧與避坑指南

1. 類路徑通配符區別

  • com.service.*:僅匹配 com.service 包下的類
  • com.service..*:匹配 com.service 及所有子包下的類
  • com..Service:匹配 com 及子包下類名以 Service 結尾的類

2. 返回類型模式選擇

  • *:通配所有返回類型(推薦,覆蓋面廣)
  • 具體類型:java.util.List、void——針對性增強,但維護成本高

3. 組合切點表達式

<aop:pointcut id="serviceMethods" expression="execution(* com.example.service..*.*(..))"/>
<aop:pointcut id="daoMethods" expression="execution(* com.example.dao..*.*(..))"/>

<aop:pointcut id="allBusiness" expression="serviceMethods or daoMethods"/>

4. 常見錯誤

  • 遺漏返回類型:execution(* *(..)) 正確,execution(*(..)) 報錯
  • 包路徑錯誤:類全限定名必須準確,.. 僅能用於包路徑,不可用於類名中間
  • 參數模式括號:(..) 兩邊括號不可省略

最佳實踐建議

  1. 業務層切點統一管理:在配置文件集中定義 id="serviceLayer" 等通用切點
  2. 優先使用接口切點:execution(* com.service.MyService+.*(..))(+ 表示接口及實現類)
  3. 避免過度通配:execution(* *(..)) 會匹配所有 Bean 方法,影響啟動性能與調試
  4. 文檔化切點語義:<aop:pointcut id="txMethods" expression="..."/> 配合註解說明業務含義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved