Spring的Pointcut分為靜態Pointcut
動態Pointcut和用戶自定義Pointcut三種
其中靜態Pointcut只是需要考慮類名
方法名
動態Pointcut除此之外
還要考慮方法的參數
以便在運行時可以動態的確定切入點的位置
Spring中切入點的粒度是方法級
因此在Spring AOP中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;
}
package org
springframework
aop;
其中matches方法用於類的匹配
參數clazz是需要匹配的目標類
匹配成功則返回true
使用JDK中定義的正則表達式對方法名進行匹配的靜態Pointcut
JdkRegexpMethodPointcut
代碼示例
<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結尾的方法都匹配
抽象的靜態Pointcut
StaticMethodMatcherPointcut
它不能被實例化
開發者可以自己擴展該類來實現自定義的切入點
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26880.html