隨筆-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
          主站蜘蛛池模板: 正阳县| 棋牌| 彰化市| 富平县| 上犹县| 张家界市| 尉犁县| 贡觉县| 陆川县| 桐庐县| 介休市| 潼关县| 醴陵市| 平顺县| 江油市| 茌平县| 壶关县| 阳新县| 漾濞| 上高县| 察隅县| 清苑县| 铅山县| 佛冈县| 贵州省| 渭南市| 西藏| 抚宁县| 阳曲县| 凉城县| 乌拉特前旗| 敦煌市| 环江| 青龙| 三穗县| 安乡县| 天门市| SHOW| 六盘水市| 临桂县| 闻喜县|