spring aop切點表達式函數

切點表達式函數
    AspectJ 5的切點表達式由關鍵字和操作參數組成,如execution(* greetTo(..))的切點表達式,“execute”爲關鍵字,而“* greetTo(..)”爲操作參數。在這裏,execute代表目標類執行某一方法,而“* greetTo(..)”是描述目標方法的匹配模式串,兩者聯合起來所表示的切點匹配目標類greetTo()方法的連接點。爲了描述方便,我們將execution()稱作函數,而將匹配串“* greetTo(..)”稱作函數的入參。
Spring支持9個@ApsectJ切點表達式函數,它們用不同的方式描述目標類的連接點,根據描述對象的不同,可以將它們大致分爲4種類型:
 方法切點函數:通過描述目標類方法信息定義連接點;
 方法入參切點函數:通過描述目標類方法入參的信息定義連接點;
 目標類切點函數:通過描述目標類類型信息定義連接點;
 代理類切點函數:通過描述目標類的代理類的信息定義連接點;
     這4種類型的切點函數,通過表 1進行說明:
    表 1 切點函數
類別
函數
入參
說明
方法切點函數
execution()
方法
匹配模式串
表示滿足某一匹配模式的所有目標類方法連接點。如execution(* greetTo(..))表示所有目標類中的greetTo()方法。
@annotation()
方法注
解類名
表示標註了特定註解的目標方法連接點。如@annotation(com.baobaotao.anno.NeedTest)表示任何標註了@NeedTest註解的目標類方法。
方法入參切點函數
args()
類名
通過判別目標類方法運行時入參對象的類型定義指定連接點。如args(com.baobaotao.Waiter)表示所有有且僅有一個按類型匹配於Waiter的入參的方法。
@args()
類型注
解類名
通過判別目標方法的運行時入參對象的類是否標註特定註解來指定連接點。如@args(com.baobaotao.Monitorable)表示任何這樣的一個目標方法:它有一個入參且入參對象的類標註@Monitorable註解。
目標類切點函數
within()
類名匹配串
   表示特定域下的所有連接點。如within(com.baobaotao.service.*)表示com.baobaotao.service包中的所有連接點,也即包中所有類的所有方法,而within(com.baobaotao.service.*Service)表示在com.baobaotao.service包中,所有以Service結尾的類的所有連接點。
target()
類名
   假如目標類按類型匹配於指定類,則目標類的所有連接點匹配這個切點。如通過target(com.baobaotao.Waiter)定義的切點,Waiter、以及Waiter實現類NaiveWaiter中所有連接點都匹配該切點。
@within()
類型註解類名
   假如目標類按類型匹配於某個類A,且類A標註了特定註解,則目標類的所有連接點匹配這個切點。
   如@within(com.baobaotao.Monitorable)定義的切點,假如Waiter類標註了@Monitorable註解,則Waiter以及Waiter實現類NaiveWaiter類的所有連接點都匹配。
@target()
類型註解類名
   目標類標註了特定註解,則目標類所有連接點匹配該切點。如@target(com.baobaotao.Monitorable),假如NaiveWaiter標註了@Monitorable,則NaiveWaiter所有連接點匹配切點。
代理類切點函數
this()
類名
 代理類按類型匹配於指定類,則被代理的目標類所有連接點匹配切點。這個函數比較難理解,這裏暫不舉例,留待後面詳解。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章