隨筆-42  評(píng)論-349  文章-4  trackbacks-0

          (殘夢(mèng)追月原創(chuàng),轉(zhuǎn)載請(qǐng)注明)
          http://www.aygfsteel.com/cmzy/archive/2008/08/25/224120.html
          接上篇:Spring中基于aop命名空間的AOP 一(一點(diǎn)準(zhǔn)備工作和一個(gè)例子)

          2、聲明一個(gè)切面
          ????? 在基于AOP命名空間的Spring AOP中,要聲明一個(gè)切面,需要使用<aop:config/>的子標(biāo)簽<aop:aspect>。<aop:aspect>標(biāo)簽有一個(gè)ref屬性必須被賦值,它用于指定和該切面關(guān)聯(lián)的受管Bean(backing bean,以后我們都將使用Backing Bean來(lái)稱呼這樣的Bean)。正如下例所示,該Bean對(duì)應(yīng)的java類是一個(gè)普通的java類,在該類中定義了切面的通知方法。此外,<aop:aspect>標(biāo)簽還有兩個(gè)可選的order屬性和id屬性,order屬性用于指定該切面的加載順序,id屬性用于標(biāo)識(shí)該切面。范例如下:

          3、聲明一個(gè)切入點(diǎn)
          ????? 要聲明一個(gè)切入點(diǎn),可以使用<aop:aspect>的子標(biāo)簽<aop:pointcut>,在Spring2.5中它有兩個(gè)屬性id和expression,分別用于標(biāo)示該切入點(diǎn)和設(shè)定該切入點(diǎn)表達(dá)式。例如:


          <aop:pointcut>標(biāo)簽的expression屬性使用前面介紹的切入點(diǎn)表達(dá)式語(yǔ)言,也就是說(shuō)支持AspectJ切入點(diǎn)表達(dá)式。但是由于xml對(duì)"&&"、"||"、"!"等邏輯運(yùn)算符不友好,@AspectJ切入點(diǎn)表達(dá)式語(yǔ)言中使用的這些邏輯運(yùn)算符在xml配置中需要分別用"and"、"or"和"not"來(lái)代替。
          有時(shí)候,我們也需要在xml中使用@Pointcut注解聲明的切入點(diǎn),那么該如何呢?大家可能記得,我們可以在切入點(diǎn)表達(dá)式中可以引用另一個(gè)切入點(diǎn)。對(duì)了,就在這里,我們使用該特性可以完成這個(gè)任務(wù),如下:

          注意:這里我們必須使用全路徑來(lái)標(biāo)示引用的切入點(diǎn)。

          4、 聲明一個(gè)通知
          ????? 和@AspectJ一樣,基于AOP命名空間的配置也可以定義五種通知類型,并且使用方式和特性類似。與@AspectJ不同的是,配置信息從Annotation中轉(zhuǎn)移到了xml配置文件。
          ??? 1)、前置通知
          ??? 聲明一個(gè)前置通知可以使用<aop:aspect>的子標(biāo)簽<aop:before/>。該標(biāo)簽的屬性說(shuō)明如下表:

          <aop:before/>標(biāo)簽屬性說(shuō)明

          屬性

          說(shuō)明

          pointcut

          指定該通知的內(nèi)置切入點(diǎn)

          pointcut-ref

          通過(guò) id 引用已定義的切入點(diǎn)

          method

          指定通知對(duì)應(yīng)的方法,該方法必須已在切面的 backing bean 中被聲明

          arg-names

          通過(guò)方法的參數(shù)名字來(lái)匹配切入點(diǎn)參數(shù)

          ????? 對(duì)于一個(gè)通知來(lái)說(shuō),切入點(diǎn)和對(duì)應(yīng)的通知方法是必須的。也就是說(shuō),在這些屬性中,method屬性是必須的,我們必須要給通知指定一個(gè)對(duì)應(yīng)的方法;pointcut屬性和pointcut-ref必須有一個(gè)被指定,以此確定該通知的切入點(diǎn)。范例如下:

          ???? 2)、 后置通知
          ???? 聲明一個(gè)后置通知使用<aop:after/>標(biāo)簽,它的屬性等和<aop:before/>標(biāo)簽類似,下面是范例:

          ???? 3)、 返回后通知
          ????? <aop:after-returning/>標(biāo)簽可以聲明一個(gè)返回后通知,該標(biāo)簽的屬性和<aop:before/>相比它多了一個(gè)returning屬性。該屬性的意義類似于@AfterReturning注解的returning屬性,用于將鏈接點(diǎn)的返回值傳給通知方法。用法如下:

          ?????? 4)、 異常通知
          ??????? 聲明一個(gè)異常通知使用<aop:after-throwing />標(biāo)簽,它有一個(gè)類似于throwing屬性又來(lái)指定該通知匹配的異常類型。用法如下:

          ????? 5)、 環(huán)繞通知
          ????? 環(huán)繞通知是所有通知中功能最強(qiáng)大的通知,用<aop:around/>標(biāo)簽來(lái)聲明。用法如下:


          (完)



          By:殘夢(mèng)追月
          posted on 2008-08-25 12:55 殘夢(mèng)追月 閱讀(4667) 評(píng)論(10)  編輯  收藏 所屬分類: Spring

          評(píng)論:
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 13:36 | 隔葉黃鶯
          你也這樣用這個(gè)語(yǔ)法著色的呀,還把上面那一行顯示了出來(lái),把copy to clipboard換成中文會(huì)好些。  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 13:48 | 殘夢(mèng)追月
          @隔葉黃鶯
          :-),我拷貝您的啦……

          哪個(gè)我不會(huì)換……不知道怎么換呀!而且在firefox下copy to clipboard顯示不出來(lái)——沒研究過(guò)SyntaxHighlighter。

          我發(fā)現(xiàn)把用這個(gè)著色的文章導(dǎo)入到j(luò)avaeye上去就可以使用javaeye的格式了……呵呵,意外發(fā)現(xiàn)啊……  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 17:35 | 隔葉黃鶯
          哈哈,不意外,因?yàn)槲揖褪菂⒖?JavaEye 的實(shí)現(xiàn),所以貼回到 JavaEye 上去正合了它的口味  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 17:53 | 殘夢(mèng)追月
          @隔葉黃鶯
          哈哈,原來(lái)如此……我就看兩個(gè)的實(shí)現(xiàn)怎么這么像呢……
          你把哪個(gè)庫(kù)壓縮過(guò)的哦……好小的一個(gè)js,
          但是貌似不支持<pre>標(biāo)簽。
          我本來(lái)想用最新的SyntaxHighlighter版本……但是不知道怎樣把一堆的JS文件合并起來(lái)……干脆懶得搞它了……
          哈哈,現(xiàn)在我可以一稿多投了……  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 21:01 | 隔葉黃鶯
          還搞一稿多投,收幾份稿費(fèi)呀,我就是只在 BlogJava 留個(gè)印,不想再跑別處張揚(yáng),別人有過(guò)多次約稿,也拒絕他們了。  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-25 21:26 | 殘夢(mèng)追月
          @隔葉黃鶯
          哈哈,只是導(dǎo)過(guò)去而已,有時(shí)候做個(gè)RSS,我又不想賺錢。
          你是高手……
          但是我是新手,想找工作丫,工作不好找……先到處亂踩點(diǎn)……  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-26 11:05 | 隔葉黃鶯
          @殘夢(mèng)追月
          你找工作,在簡(jiǎn)歷上還寫上你的博客地址不成,我這邊是同事都不知道我的博客。  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-26 11:23 | 殘夢(mèng)追月
          @隔葉黃鶯
          也有道理哦……但是現(xiàn)在不曉得朗格辦了&……
          只好先把它維護(hù)起,大不了做個(gè)紀(jì)念……
          又不是名牌大學(xué)……又不是計(jì)算機(jī)專業(yè)……郁悶……
          ……  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-26 11:35 | 隔葉黃鶯
          朗格辦 是哪的口音  回復(fù)  更多評(píng)論
            
          # re: Spring中基于aop命名空間的AOP 二(聲明一個(gè)切面、切入點(diǎn)和通知) 2008-08-26 12:00 | 殘夢(mèng)追月
          @隔葉黃鶯
          四川滴……
          我是四川人,也在雅安讀書……要畢業(yè)了&……  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 贵定县| 苏尼特左旗| 阿鲁科尔沁旗| 南昌市| 洛扎县| 金门县| 林甸县| 中山市| 桂平市| 罗甸县| 上饶县| 大连市| 达日县| 米易县| 新昌县| 两当县| 河源市| 江阴市| 唐山市| 施秉县| 大石桥市| 麻栗坡县| 富裕县| 耒阳市| 酒泉市| 南京市| 潼南县| 竹北市| 乳山市| 陕西省| 徐闻县| 新源县| 伊宁县| 曲松县| 安西县| 曲靖市| 射洪县| 天峻县| 札达县| 隆回县| 上饶市|