Pointcut即切入點用於配置切面的切入位置由於Spring中切入點的粒度是方法級因此在Spring AOP中Pointcut的作用是配置哪些類中哪些方法在我們定義的且入點之內哪些方法應該被過濾排除Spring的Pointcut分為靜態Pointcut動態Pointcut和用戶自定義Pointcut三種其中靜態Pointcut只是需要考慮類名方法名動態Pointcut除此之外還要考慮方法的參數以便在運行時可以動態的確定切入點的位置
靜態Pointcut
靜態即意味著不變例如方法和類的名稱因此我們可以根據類和方法的簽名來判定那些類的哪些方法在我們定義的切入點之內哪些應該被過濾排除
Spring中定義中如下幾個靜態Pointcut的實現類介紹如下
NameMatchMethodPointcut只能對方法名進行判別的靜態Pointcut實現類
使用范例如下
<bean id=
NameMatchMethodPointcut
class=
org
springframework
aop
support
NameMatchMethodPointcut
>
<property name=
mappedNames
>
<list>
<value>pos*</value>
<value>start</value>
</list>
</property>
</bean>
注意post*表示包含所有以pos開始的方法(大小寫敏感)
此外NameMatchMethodPointcut還暴露了ClassFilter類型的classFilter屬性可以用於指定ClassFilter接口的實現類來設置類過濾器ClassFilter接口的定義如下
package org
springframework
aop;
public interface ClassFilter {
boolean matches(Class clazz);
ClassFilter TRUE = TrueClassFilter
INSTANCE;
}
其中matches方法用於類的匹配參數clazz是需要匹配的目標類匹配成功則返回true
JdkRegexpMethodPointcut使用JDK中定義的正則表達式對方法名進行匹配的靜態Pointcut范例如下
<bean id=
JdkRegexpMethodPointcut
class=
org
springframework
aop
support
JdkRegexpMethodPointcut
>
<property name=
patterns
>
<list>
<value>
*ost</value>
<value>
*tart</value>
</list>
</property>
<property name=
excludedPatterns
>
<list>
<value>
*tart</value>
</list>
</property>
</bean>
注意*ost正則表達式所有以ost結尾的方法都匹配
在該例中patterns屬性是一個javalangSring[]類型的數組表示數組中所有和定義的正則表達式匹配的方法都包含在定義的切入點內excludedPatterns則相反表示被排除於切入點范圍的方法同時和NameMatchMethodPointcut一樣它也可以用ClassFilter類型的classFilter屬性來定義類過濾器
StaticMethodMatcherPointcut一個抽象的靜態Pointcut它不能被實例化開發者可以自己擴展該類來實現自定義的切入點
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28395.html