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

Spring 靜態切入點總覽(一):NameMatchMethodPointcut、JdkRegexpMethodPointcut 與自訂擴展

     編輯:Java 相關知識

切入點分類

Spring AOP 切入點粒度為方法級,分為:

  • 靜態切入點:僅依類名、方法名等靜態簽名判斷,結果可快取,效能最佳。
  • 動態切入點:需檢查方法參數值,不可快取。
  • 自訂切入點:實作 Pointcut 介面或繼承抽象基類。

內建靜態切入點實作

1. NameMatchMethodPointcut —— 方法名稱匹配

<bean id="nameMatchPc" class="org.springframework.aop.support.NameMatchMethodPointcut">
  <property name="mappedNames">
    <list>
      <value>pos*</value>   <!-- 以 pos 開頭 -->
      <value>start</value>  <!-- 精確匹配 start -->
    </list>
  </property>
  <!-- 可選:類別過濾器 -->
  <property name="classFilter" ref="myClassFilter"/>
</bean>
  • mappedNames:支援通配符 *,大小寫敏感。
  • classFilter:實作 ClassFilter 介面 boolean matches(Class clazz),限定目標類別。

2. JdkRegexpMethodPointcut —— JDK 正則運算式匹配

<bean id="regexpPc" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
  <property name="patterns">
    <list>
      <value>.*ost</value>   <!-- 以 ost 結尾 -->
      <value>.*tart</value>  <!-- 以 tart 結尾 -->
    </list>
  </property>
  <property name="excludedPatterns">
    <list><value>.*tart</value></list> <!-- 排除以 tart 結尾 -->
  </property>
  <property name="classFilter" ref="myClassFilter"/>
</bean>
  • 使用 java.util.regex 引擎,功能強大。
  • patterns 為包含規則,excludedPatterns 為排除規則。

3. StaticMethodMatcherPointcut —— 自訂靜態切入點基類

  • 抽象類,不可直接實例化。
  • 繼承並實作 matches(Method, Class) 即可自訂靜態匹配邏輯。
  • 若需動態匹配,改繼承 DynamicMethodMatcherPointcut。

ClassFilter 介面定義

public interface ClassFilter {
    boolean matches(Class clazz);
    ClassFilter TRUE = TrueClassFilter.INSTANCE; // 匹配所有類別
}

將實作類注入 classFilter 屬性,可精確控制切入點套用的目標類別範圍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved