execution:使用“execution(方法表达式)
”匹配方法执行
模式 | 描述 |
---|---|
public * *(..) |
任何公共方法的执行 |
* com.learn..IHelloService.*() |
com.learn包及所有子包下IHelloService接口中的任何无参方法 |
* com.learn..*.*(..) |
com.learn包及所有子包下任何类的任何方法 |
* com.learn..IHelloService.*(*) |
com.learn包及所有子包下IHelloService接口的任何只有一个参数方法 |
* (!com.learn..IHelloService+).*(..) |
非“com.learn包及所有子包下IHelloService接口及子类型”的任何方法 |
* com.learn..IHelloService+.*() |
com.learn包及所有子包下IHelloService接口及子类型的的任何无参方法 |
* com.learn..IHelloService*.test*(java.util.Date) |
com.learn包及所有子包下IHelloService前缀类型的的以test开头的只有一个参数类型为java.util.Date的方法,注意该匹配是根据方法签名的参数类型进行匹配的,而不是根据执行时传入的参数类型决定的,如定义方法:public void test(Object obj);即使执行时传入java.util.Date,也不会匹配的; |
* com.learn..IHelloService.test(..) throws IllegalArgumentException, ArrayIndexOutOfBoundsException | com.learn包及所有子包下IHelloService前缀类型的的任何方法,且抛出IllegalArgumentException和ArrayIndexOutOfBoundsException异常 |
* (com.learn..IHelloService+ && java.io.Serializable+).*(..) | 任何实现了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 (*)) |
任何签名带有两个参数的方法,且这个两个参数都被@Secure标记了,如public void test(@Secure String str1, @Secure String str1) |
* *((@ com.learn..Secure *))或 * *(@ com.learn..Secure *) | 任何带有一个参数的方法,且该参数类型持有@com.learn..Secure;如public void test(Model model);且Model类上持有@Secure注解 |
* *( @com.learn..Secure (@com.learn..Secure *) , @ com.learn..Secure (@com.learn..Secure *)) | 任何带有两个参数的方法,且这两个参数都被@com.learn..Secure标记了;且这两个参数的类型上都持有@ com.learn..Secure; |
* *( java.util.Map<com.learn..Model, com.learn..Model> , ..) | 任何带有一个java.util.Map参数的方法,且该参数类型是以< com.learn..Model, com.learn..Model >为泛型参数;注意只匹配第一个参数为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);也将不匹配,因为泛型参数不匹配 * *(java.util.Collection<@com.learn..Secure *>) 任何带有一个参数(类型为java.util.Collection)的方法,且该参数类型是有一个泛型参数,该泛型参数类型上持有@com.learn..Secure注解; 如public void test(Collection<Model> collection);Model类型上持有@com.learn..Secure * *(java.util.Set<? extends HashMap>) 任何带有一个参数的方法,且传入的参数类型是有一个泛型参数,该泛型参数类型继承与HashMap; Spring AOP目前测试不能正常工作 |
* *(java.util.List<? super HashMap>) |
任何带有一个参数的方法,且传入的参数类型是有一个泛型参数,该泛型参数类型是HashMap的基类型;如public voi test(Map map);Spring AOP目前测试不能正常工作 |
* *(*<@com.learn..Secure *>) |
任何带有一个参数的方法,且该参数类型是有一个泛型参数,该泛型参数类型上持有@com.learn..Secure注解;Spring AOP目前测试不能正常工作 |
execution是AOP匹配中的基础,可以参考表格自己写例子。
或者可以参看源码。