学习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)都匹配。