(殘夢追月原創(chuàng),轉(zhuǎn)載請注明,如有不當(dāng)之處,敬請斧正!
本文地址:http://m.tkk7.com/cmzy/archive/2008/08/10/220917.html)
下面以JdkRegexpMethodPointcut為例,通過一個(gè)完整的范例展示如何使用靜態(tài)切入點(diǎn)(完整工程代碼見例程4.3)。在工程中我們定義一個(gè)People類和一個(gè)切面,并將他們在Spring xml配置文件中聯(lián)系起來。當(dāng)People對象執(zhí)行我們切入點(diǎn)中定義的方法時(shí),前置裝備LogerPeople將會(huì)給出相應(yīng)的提示信息。
新建一個(gè)工程AOP_Test4.3,添加Spring開發(fā)庫后,新建aop.test包。
創(chuàng)建目標(biāo)類People,該類有speak、Running、Loving、died四個(gè)成員方法。代碼如下:
創(chuàng)建一個(gè)類名為LogerPeople的前置裝備,它實(shí)現(xiàn)MethodBeforeAdvice接口,在before方法中利用Log4J輸出相關(guān)信息,代碼如下:
> 再編寫Spring配置文件,完成后如下:
> 為了讓ProxyFactoryBean使用我們定義的JdkRegexpMethodPointcut而不是默認(rèn)的Pointcut,我們需要配置一個(gè)切入點(diǎn)配置器PointcutAdvisor,其advice屬性指定裝備,Pointcut屬性指定切入點(diǎn)。然后再將該切入點(diǎn)配置器注入給ProxyFactoryBean。各個(gè)Bean的依賴關(guān)系和說明如下:

圖4.4 ProxyFactoryBean代理生成
在JdkRegexpMethodPointcut中,我們使用了它兩個(gè)屬性patterns和excludedPattern:patterns利用正則表達(dá)式指定了我們要監(jiān)視的方法這里是包含了所有的方法;excludedPattern指定了我們要排除的方法,這里指定了以Run開頭的方法。
注意:
1)“.*spea.*”表示所有名字以spea開頭的方法,例程中是指speak方法;
2)“.*ing”表示所有名字以ing結(jié)束的方法,例程中是指Running和Loving方法;
3)“.*di.*”表示所有名字以di開頭的方法,例程中是指died方法;
4)“.*Run.*”表示所有名字以Run開頭的方法,例程中是指Running方法;
創(chuàng)建含主方法的測試類TestMain,在一種我們從ProxyFactoryBean中獲得People實(shí)例對象,并一次調(diào)用該對象的方法,代碼如下:
該類運(yùn)行結(jié)果如下:
圖4.5 例程4.3運(yùn)行結(jié)果
可以看到People類中的speak、Loving、died方法已經(jīng)被攔截。但是Running方法卻沒有攔截,這是因?yàn)槲覀冊贘dkRegexpMethodPointcut中指定其excludedPattern屬性把它排除在切入點(diǎn)之外的緣故。
By:殘夢追月
posted on 2008-08-10 16:52
殘夢追月 閱讀(2173)
評論(0) 編輯 收藏 所屬分類:
Spring