隨筆-42  評論-349  文章-4  trackbacks-0


          (殘夢追月原創,轉載請注明,如有不當之處,敬請斧正!
          本文地址:http://www.aygfsteel.com/cmzy/archive/2008/08/10/220917.html)

                 下面以JdkRegexpMethodPointcut為例,通過一個完整的范例展示如何使用靜態切入點(完整工程代碼見例程4.3)。在工程中我們定義一個People類和一個切面,并將他們在Spring xml配置文件中聯系起來。當People對象執行我們切入點中定義的方法時,前置裝備LogerPeople將會給出相應的提示信息。

                  新建一個工程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:殘夢追月
          posted on 2008-08-10 16:52 殘夢追月 閱讀(2175) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 皮山县| 苍南县| 平江县| 岗巴县| 谷城县| 阿拉善盟| 敦煌市| 宁武县| 华池县| 昌宁县| 广汉市| 讷河市| 安塞县| 盐城市| 墨脱县| 鸡泽县| 佛冈县| 宜兰市| 嘉定区| 东阿县| 禄丰县| 江华| 涿州市| 乳山市| 喜德县| 安顺市| 德保县| 剑河县| 宁陕县| 凤庆县| 宜宾市| 怀集县| 志丹县| 宜州市| 云梦县| 喀喇沁旗| 宣威市| 瑞金市| 新竹市| 于田县| 分宜县|