Pointcut即切入點,用於配置切面的切入位置。由於Spring中切入點的粒度是方法級,因此在Spring AOP中Pointcut的作用是配置哪些類中哪些方法在我們定義的且入點之內、哪些方法應該被過濾排除。Spring的Pointcut分為靜態Pointcut、動態Pointcut和用戶自定義Pointcut三種,其中靜態Pointcut只是需要考慮類名、方法名;動態Pointcut除此之外,還要考慮方法的參數,以便在運行時可以動態的確定切入點的位置。
1、靜態Pointcut
靜態即意味著不變,例如方法和類的名稱。因此我們可以根據類和方法的簽名來判定那些類的哪些方法在我們定義的切入點之內、哪些應該被過濾排除。
Spring中定義中如下幾個靜態Pointcut的實現類,介紹如下:
1、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;
}
package org.springframework.aop;
其中matches方法用於類的匹配,參數clazz是需要匹配的目標類,匹配成功則返回true。
2、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屬性是一個java.lang.Sring[]類型的數組,表示數組中所有和定義的正則表達式匹配的方法都包含在定義的切入點內。excludedPatterns則相反,表示被排除於切入點范圍的方法。同時和NameMatchMethodPointcut一樣,它也可以用ClassFilter類型的classFilter屬性來定義類過濾器。
3、StaticMethodMatcherPointcut:一個抽象的靜態Pointcut,它不能被實例化。開發者可以自己擴展該類來實現自定義的切入點。
本文地址:http://www.blogjava.net/cmzy/archive/2008/08/09/220910.html)