Spring AOP表達式(execution)規則

如:execution(* com.sample.service.impl..*.*(..))java

解釋以下:函數

符號 含義
execution() 表達式的主體;
第一個」*「符號 表示返回值的類型任意;
com.sample.service.impl AOP所切的服務的包名,即,咱們的業務部分
包名後面的」..「 表示當前包及子包
第二個」*「 表示類名,*即全部類。此處能夠自定義,下文有舉例
.*(..) 表示任何方法名,括號表示參數,兩個點表示任何參數類型



AspectJ中的exection表達式小結:spa

基本語法格式爲:.net

execution(<修飾符模式>?<返回類型模式><方法名模式>(<參數模式>)<異常模式>?)  除了返回類型模式、方法名模式和參數模式外,其它項都是可選的。接口

下面,咱們給出各類使用execution()函數實例。ci

 

1)經過方法簽名定義切點get

 execution(public * *(..))it

匹配全部目標類的public方法,但不匹配SmartSeller和protected voidshowGoods()方法。第一個*表明返回類型,第二個*表明方法名,而..表明任意入參的方法;io

 

 execution(* *To(..))ltable

匹配目標類全部以To爲後綴的方法。它匹配NaiveWaiter和NaughtyWaiter的greetTo()和serveTo()方法。第一個*表明返回類型,而*To表明任意以To爲後綴的方法;

 

2)經過類定義切點

 execution(*com.baobaotao.Waiter.*(..))l

匹配Waiter接口的全部方法,它匹配NaiveWaiter和NaughtyWaiter類的greetTo()和serveTo()方法。第一個*表明返回任意類型,com.baobaotao.Waiter.*表明Waiter接口中的全部方法;

 

 execution(*com.baobaotao.Waiter+.*(..))l

匹配Waiter接口及其全部實現類的方法,它不但匹配NaiveWaiter和NaughtyWaiter類的greetTo()和serveTo()這兩個Waiter接口定義的方法,同時還匹配NaiveWaiter#smile()和NaughtyWaiter#joke()這兩個不在Waiter接口中定義的方法。

 

3)經過類包定義切點

在類名模式串中,「.*」表示包下的全部類,而「..*」表示包、子孫包下的全部類。

 execution(* com.baobaotao.*(..))l

匹配com.baobaotao包下全部類的全部方法;

 

 execution(* com.baobaotao..*(..))l

匹配com.baobaotao包、子孫包下全部類的全部方法,如com.baobaotao.dao,com.baobaotao.servier以及com.baobaotao.dao.user包下的全部類的全部方法都匹配。「..」出如今類名中時,後面必須跟「*」,表示包、子孫包下的全部類;

 

 execution(* com..*.*Dao.find*(..))l

匹配包名前綴爲com的任何包下類名後綴爲Dao的方法,方法名必須以find爲前綴。如com.baobaotao.UserDao#findByUserId()、com.baobaotao.dao.ForumDao#findById()的方法都匹配切點。

 

4)經過方法入參定義切點

切點表達式中方法入參部分比較複雜,能夠使用「*」和「..」通配符,其中「*」表示任意類型的參數,而「..」表示任意類型參數且參數個數不限。

 

 execution(* joke(String,int)))l

匹 配joke(String,int)方法,且joke()方法的第一個入參是String,第二個入參是int。它匹配NaughtyWaiter#joke(String,int)方法。若是方法中的入參類型是Java.lang包下的類,能夠直接使用類名,不然必須使用全限定類名,如joke(java.util.List,int);

 

 execution(* joke(String,*)))l

匹 配目標類中的joke()方法,該方法第一個入參爲String,第二個入參能夠是任意類型,如joke(Strings1,String s2)和joke(String s1,double d2)都匹配,但joke(String s1,doubled2,String s3)則不匹配;

 

 execution(* joke(String,..)))l

匹配目標類中的joke()方法,該方法第 一個入參爲String,後面能夠有任意個入參且入參類型不限,如joke(Strings1)、joke(String s1,String s2)和joke(String s1,double d2,Strings3)都匹配。

 

 execution(* joke(Object+)))

匹 配目標類中的joke()方法,方法擁有一個入參,且入參是Object類型或該類的子類。它匹配joke(Strings1)和joke(Client c)。若是咱們定義的切點是execution(*joke(Object)),則只匹配joke(Object object)而不匹配joke(Stringcc)或joke(Client c)。

------------------------------------------------------------------------------

2.官方解釋及舉例

------------------------------------------------------------------------------

相關文章
相關標籤/搜索