隨筆-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 殘夢追月 閱讀(2180) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 红桥区| 当雄县| 濉溪县| 临城县| 灵台县| 张家港市| 兰考县| 铜陵市| 台南县| 河津市| 神农架林区| 武隆县| 客服| 萨迦县| 雷山县| 安仁县| 神农架林区| 濮阳市| 北票市| 东光县| 都兰县| 黔江区| 淮南市| 子长县| 丹凤县| 青岛市| 同心县| 明水县| 时尚| 百色市| 三台县| 沭阳县| 犍为县| 科技| 江山市| 咸阳市| 河曲县| 盐山县| 安图县| 虹口区| 五常市|