學習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)都匹配。