execution:使用“execution(方法表達式)”匹配方法執(zhí)行
| 模式 | 描述 |
|---|---|
public * *(..) |
任何公共方法的執(zhí)行 |
* com.learn..IHelloService.*() |
com.learn包及所有子包下IHelloService接口中的任何無參方法 |
* com.learn..*.*(..) |
com.learn包及所有子包下任何類的任何方法 |
* com.learn..IHelloService.*(*) |
com.learn包及所有子包下IHelloService接口的任何只有一個參數(shù)方法 |
* (!com.learn..IHelloService+).*(..) |
非“com.learn包及所有子包下IHelloService接口及子類型”的任何方法 |
* com.learn..IHelloService+.*() |
com.learn包及所有子包下IHelloService接口及子類型的的任何無參方法 |
* com.learn..IHelloService*.test*(java.util.Date) |
com.learn包及所有子包下IHelloService前綴類型的的以test開頭的只有一個參數(shù)類型為java.util.Date的方法,注意該匹配是根據(jù)方法簽名的參數(shù)類型進行匹配的,而不是根據(jù)執(zhí)行時傳入的參數(shù)類型決定的,如定義方法:public void test(Object obj);即使執(zhí)行時傳入java.util.Date,也不會匹配的; |
| * com.learn..IHelloService.test(..) throws IllegalArgumentException, ArrayIndexOutOfBoundsException | com.learn包及所有子包下IHelloService前綴類型的的任何方法,且拋出IllegalArgumentException和ArrayIndexOutOfBoundsException異常 |
| * (com.learn..IHelloService+ && java.io.Serializable+).*(..) | 任何實現(xiàn)了com.learn包及所有子包下 IHelloService接口和java.io.Serializable接口的類型的任何方法 |
@java.lang.Deprecated * *(..) |
任何持有@java.lang.Deprecated注解的方法 |
| @(java.lang.Deprecated || com.learn..Secure) * *(..) | 任何持有@java.lang.Deprecated或@com.learn..Secure注解的方法 |
(@com.learn..Secure *) *(..) |
任何返回值類型持有@com.learn..Secure的方法 |
* (@com.learn..Secure *).*(..) |
任何定義方法的類型持有@com.learn..Secure的方法 |
* *(@com.learn..Secure (*) , @com.learn..Secure (*)) |
任何簽名帶有兩個參數(shù)的方法,且這個兩個參數(shù)都被@Secure標記了,如public void test(@Secure String str1, @Secure String str1) |
| * *((@ com.learn..Secure *))或 * *(@ com.learn..Secure *) | 任何帶有一個參數(shù)的方法,且該參數(shù)類型持有@com.learn..Secure;如public void test(Model model);且Model類上持有@Secure注解 |
| * *( @com.learn..Secure (@com.learn..Secure *) , @ com.learn..Secure (@com.learn..Secure *)) | 任何帶有兩個參數(shù)的方法,且這兩個參數(shù)都被@com.learn..Secure標記了;且這兩個參數(shù)的類型上都持有@ com.learn..Secure; |
| * *( java.util.Map<com.learn..Model, com.learn..Model> , ..) | 任何帶有一個java.util.Map參數(shù)的方法,且該參數(shù)類型是以< com.learn..Model, com.learn..Model >為泛型參數(shù);注意只匹配第一個參數(shù)為java.util.Map,不包括子類型;如public void test(HashMap<Model, Model> map, String str);將不匹配,必須使用“* *( java.util.HashMap<com.learn..Model,com.learn..Model> , ..)”進行匹配; 而public void test(Map map, int i);也將不匹配,因為泛型參數(shù)不匹配 * *(java.util.Collection<@com.learn..Secure *>) 任何帶有一個參數(shù)(類型為java.util.Collection)的方法,且該參數(shù)類型是有一個泛型參數(shù),該泛型參數(shù)類型上持有@com.learn..Secure注解; 如public void test(Collection<Model> collection);Model類型上持有@com.learn..Secure * *(java.util.Set<? extends HashMap>) 任何帶有一個參數(shù)的方法,且傳入的參數(shù)類型是有一個泛型參數(shù),該泛型參數(shù)類型繼承與HashMap; Spring AOP目前測試不能正常工作 |
* *(java.util.List<? super HashMap>) |
任何帶有一個參數(shù)的方法,且傳入的參數(shù)類型是有一個泛型參數(shù),該泛型參數(shù)類型是HashMap的基類型;如public voi test(Map map);Spring AOP目前測試不能正常工作 |
* *(*<@com.learn..Secure *>) |
任何帶有一個參數(shù)的方法,且該參數(shù)類型是有一個泛型參數(shù),該泛型參數(shù)類型上持有@com.learn..Secure注解;Spring AOP目前測試不能正常工作 |
execution是AOP匹配中的基礎,可以參考表格自己寫例子。
或者可以參看源碼。