(殘夢追月原創(chuàng),轉(zhuǎn)載請注明)
http://www.aygfsteel.com/cmzy/archive/2008/08/25/224120.html
接上篇:Spring中基于aop命名空間的AOP 一(一點(diǎn)準(zhǔn)備工作和一個例子)
2、聲明一個切面
????? 在基于AOP命名空間的Spring AOP中,要聲明一個切面,需要使用<aop:config/>的子標(biāo)簽<aop:aspect>。<aop:aspect>標(biāo)簽有一個ref屬性必須被賦值,它用于指定和該切面關(guān)聯(lián)的受管Bean(backing bean,以后我們都將使用Backing Bean來稱呼這樣的Bean)。正如下例所示,該Bean對應(yīng)的java類是一個普通的java類,在該類中定義了切面的通知方法。此外,<aop:aspect>標(biāo)簽還有兩個可選的order屬性和id屬性,order屬性用于指定該切面的加載順序,id屬性用于標(biāo)識該切面。范例如下:
3、聲明一個切入點(diǎn)
????? 要聲明一個切入點(diǎn),可以使用<aop:aspect>的子標(biāo)簽<aop:pointcut>,在Spring2.5中它有兩個屬性id和expression,分別用于標(biāo)示該切入點(diǎn)和設(shè)定該切入點(diǎn)表達(dá)式。例如:
<aop:pointcut>標(biāo)簽的expression屬性使用前面介紹的切入點(diǎn)表達(dá)式語言,也就是說支持AspectJ切入點(diǎn)表達(dá)式。但是由于xml對"&&"、"||"、"!"等邏輯運(yùn)算符不友好,@AspectJ切入點(diǎn)表達(dá)式語言中使用的這些邏輯運(yùn)算符在xml配置中需要分別用"and"、"or"和"not"來代替。
有時候,我們也需要在xml中使用@Pointcut注解聲明的切入點(diǎn),那么該如何呢?大家可能記得,我們可以在切入點(diǎn)表達(dá)式中可以引用另一個切入點(diǎn)。對了,就在這里,我們使用該特性可以完成這個任務(wù),如下:
注意:這里我們必須使用全路徑來標(biāo)示引用的切入點(diǎn)。
4、 聲明一個通知
????? 和@AspectJ一樣,基于AOP命名空間的配置也可以定義五種通知類型,并且使用方式和特性類似。與@AspectJ不同的是,配置信息從Annotation中轉(zhuǎn)移到了xml配置文件。
??? 1)、前置通知
??? 聲明一個前置通知可以使用<aop:aspect>的子標(biāo)簽<aop:before/>。該標(biāo)簽的屬性說明如下表:
<aop:before/>標(biāo)簽屬性說明
屬性
|
說明
|
pointcut |
指定該通知的內(nèi)置切入點(diǎn)
|
pointcut-ref |
通過
id
引用已定義的切入點(diǎn)
|
method |
指定通知對應(yīng)的方法,該方法必須已在切面的
backing bean
中被聲明
|
arg-names |
通過方法的參數(shù)名字來匹配切入點(diǎn)參數(shù)
|
????? 對于一個通知來說,切入點(diǎn)和對應(yīng)的通知方法是必須的。也就是說,在這些屬性中,method屬性是必須的,我們必須要給通知指定一個對應(yīng)的方法;pointcut屬性和pointcut-ref必須有一個被指定,以此確定該通知的切入點(diǎn)。范例如下:
???? 2)、 后置通知
???? 聲明一個后置通知使用<aop:after/>標(biāo)簽,它的屬性等和<aop:before/>標(biāo)簽類似,下面是范例:
???? 3)、 返回后通知
????? <aop:after-returning/>標(biāo)簽可以聲明一個返回后通知,該標(biāo)簽的屬性和<aop:before/>相比它多了一個returning屬性。該屬性的意義類似于@AfterReturning注解的returning屬性,用于將鏈接點(diǎn)的返回值傳給通知方法。用法如下:
?????? 4)、 異常通知
??????? 聲明一個異常通知使用<aop:after-throwing />標(biāo)簽,它有一個類似于throwing屬性又來指定該通知匹配的異常類型。用法如下:
????? 5)、 環(huán)繞通知
????? 環(huán)繞通知是所有通知中功能最強(qiáng)大的通知,用<aop:around/>標(biāo)簽來聲明。用法如下:
(完)
By:殘夢追月