(殘夢追月原創,轉載請注明,如有不當之處,敬請斧正!
本文地址:http://www.aygfsteel.com/cmzy/archive/2008/08/10/220917.html)
新建一個工程AOP_Test4.3,添加Spring開發庫后,新建aop.test包。
創建目標類People,該類有speak、Running、Loving、died四個成員方法。代碼如下:
創建一個類名為LogerPeople的前置裝備,它實現MethodBeforeAdvice接口,在before方法中利用Log4J輸出相關信息,代碼如下:
> 再編寫Spring配置文件,完成后如下:
> 為了讓ProxyFactoryBean使用我們定義的JdkRegexpMethodPointcut而不是默認的Pointcut,我們需要配置一個切入點配置器PointcutAdvisor,其advice屬性指定裝備,Pointcut屬性指定切入點。然后再將該切入點配置器注入給ProxyFactoryBean。各個Bean的依賴關系和說明如下:
圖4.4 ProxyFactoryBean代理生成
在JdkRegexpMethodPointcut中,我們使用了它兩個屬性patterns和excludedPattern:patterns利用正則表達式指定了我們要監視的方法這里是包含了所有的方法;excludedPattern指定了我們要排除的方法,這里指定了以Run開頭的方法。
注意:
1)“.*spea.*”表示所有名字以spea開頭的方法,例程中是指speak方法;
2)“.*ing”表示所有名字以ing結束的方法,例程中是指Running和Loving方法;
3)“.*di.*”表示所有名字以di開頭的方法,例程中是指died方法;
4)“.*Run.*”表示所有名字以Run開頭的方法,例程中是指Running方法;
創建含主方法的測試類TestMain,在一種我們從ProxyFactoryBean中獲得People實例對象,并一次調用該對象的方法,代碼如下:
該類運行結果如下:
圖4.5 例程4.3運行結果
可以看到People類中的speak、Loving、died方法已經被攔截。但是Running方法卻沒有攔截,這是因為我們在JdkRegexpMethodPointcut中指定其excludedPattern屬性把它排除在切入點之外的緣故。
By:殘夢追月