(殘夢(mèng)追月原創(chuàng)……轉(zhuǎn)載注明,如有不當(dāng)之處,歡迎斧正!
本文地址:http://m.tkk7.com/cmzy/archive/2008/08/09/220910.html)
Pointcut即切入點(diǎn),用于配置切面的切入位置。由于Spring中切入點(diǎn)的粒度是方法級(jí),因此在Spring AOP中Pointcut的作用是配置哪些類中哪些方法在我們定義的且入點(diǎn)之內(nèi)、哪些方法應(yīng)該被過(guò)濾排除。Spring的Pointcut分為靜態(tài)Pointcut、動(dòng)態(tài)Pointcut和用戶自定義Pointcut三種,其中靜態(tài)Pointcut只是需要考慮類名、方法名;動(dòng)態(tài)Pointcut除此之外,還要考慮方法的參數(shù),以便在運(yùn)行時(shí)可以動(dòng)態(tài)的確定切入點(diǎn)的位置。
1、 靜態(tài)Pointcut
靜態(tài)即意味著不變,例如方法和類的名稱。因此我們可以根據(jù)類和方法的簽名來(lái)判定那些類的哪些方法在我們定義的切入點(diǎn)之內(nèi)、哪些應(yīng)該被過(guò)濾排除。
Spring中定義中如下幾個(gè)靜態(tài)Pointcut的實(shí)現(xiàn)類,介紹如下:
1、 NameMatchMethodPointcut:只能對(duì)方法名進(jìn)行判別的靜態(tài)Pointcut實(shí)現(xiàn)類。
使用范例如下:
注意:post*表示包含所有以pos開(kāi)始的方法。(大小寫(xiě)敏感)。
此外,NameMatchMethodPointcut還暴露了ClassFilter類型的classFilter屬性,可以用于指定ClassFilter接口的實(shí)現(xiàn)類來(lái)設(shè)置類過(guò)濾器。ClassFilter接口的定義如下:
其中matches方法用于類的匹配,參數(shù)clazz是需要匹配的目標(biāo)類,匹配成功則返回true。
2、 JdkRegexpMethodPointcut:使用JDK中定義的正則表達(dá)式對(duì)方法名進(jìn)行匹配的靜態(tài)Pointcut。范例如下:
注意:.*ost正則表達(dá)式,所有以ost結(jié)尾的方法都匹配。
在該例中,patterns屬性是一個(gè)java.lang.Sring[]類型的數(shù)組,表示數(shù)組中所有和定義的正則表達(dá)式匹配的方法都包含在定義的切入點(diǎn)內(nèi)。excludedPatterns則相反,表示被排除于切入點(diǎn)范圍的方法。同時(shí)和NameMatchMethodPointcut一樣,它也可以用ClassFilter類型的classFilter屬性來(lái)定義類過(guò)濾器。
3、 StaticMethodMatcherPointcut:一個(gè)抽象的靜態(tài)Pointcut,它不能被實(shí)例化。開(kāi)發(fā)者可以自己擴(kuò)展該類來(lái)實(shí)現(xiàn)自定義的切入點(diǎn)。
By:殘夢(mèng)追月
posted on 2008-08-09 10:29
殘夢(mèng)追月 閱讀(3666)
評(píng)論(0) 編輯 收藏 所屬分類:
Spring