Spring AOP 切入點粒度為方法級,分為:
Pointcut 介面或繼承抽象基類。<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),限定目標類別。<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 為排除規則。matches(Method, Class) 即可自訂靜態匹配邏輯。DynamicMethodMatcherPointcut。public interface ClassFilter {
boolean matches(Class clazz);
ClassFilter TRUE = TrueClassFilter.INSTANCE; // 匹配所有類別
}
將實作類注入 classFilter 屬性,可精確控制切入點套用的目標類別範圍。