aop中execution 表达式
原创
©著作权归作者所有:来自51CTO博客作者wx630f300fec73f的原创作品,请联系作者获取转载授权,否则将追究法律责任
学习Spring中的aop组装切面时遇到的execution表达式,下面是execution表达式的详解
切入点表达式:execution(* 包名.*.*(..))
整个表达式可以分为五个部分:
1、execution(): 表达式主体。
2、第一个*号:方法返回类型, *号表示所有的类型。
3、包名:表示需要拦截的包名。
4、第二个*号:表示类名,*号表示所有的类。
5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面( )里面表示方法的参数,两个句点表示任何参数
其中除了返回类型模式、方法名模式和参数模式外,其它项都是可选的。
举例:
execution(public * *(..)) 匹配所有的public修饰符的方法
execution(* set*(..)) 匹配所有”set”开头的方法:
execution(* com.xyz.service.AccountService.*(..)) 匹配AccountService 接口/类的所有方法:
execution(* joke(String,int))
匹 配joke(String,int)方法,且joke()方法的第一个入参是String,第二个入参是int。如果方法中的入参类型是Java.lang包下的类,可以直接使用类名,否则必须使用全限定类名,如joke(java.util.List,int);
execution(* joke(String,*))
匹 配目标类中的joke()方法,该方法第一个入参为String,第二个入参可以是任意类型,如joke(Strings1,String s2)和joke(String s1,double d2)都匹配,但joke(String s1,doubled2,String s3)则不匹配;
execution(* joke(String,..))
匹配目标类中的joke()方法,该方法第 一个入参为String,后面可以有任意个入参且入参类型不限,如joke(Strings1)、joke(String s1,String s2)和joke(String s1,double d2,Strings3)都匹配。