java切⾯表达式_SpringAOP表达式(execution)规则
如:execution(* com.sample.rvice.impl..*.*(..))
解释如下:
符号
含义
execution()
表达式的主体;
第⼀个”*“符号
表⽰返回值的类型任意;
com.sample.rvice.impl
AOP所切的服务的包名,即,我们的业务部分
包名后⾯的”..“
表⽰当前包及⼦包ppt文件
难过说说
第⼆个”*“
表⽰类名,*即所有类。此处可以⾃定义,下⽂有举例
.*(..)
表⽰任何⽅法名,括号表⽰参数,两个点表⽰任何参数类型
AspectJ中的exection表达式⼩结:
基本语法格式为:
execution(?()?) 除了返回类型模式、⽅法名模式和参数模式外,其它项都是可选的。
下⾯,我们给出各种使⽤execution()函数实例。
硅化物1)通过⽅法签名定义切点
水库调度
小学一年级自我介绍execution(public * *(..))
匹配所有⽬标类的public⽅法,但不匹配SmartSeller和protected voidshowGoods()⽅法。第⼀个*代表返回类型,第⼆个*代表⽅法名,⽽..代表任意⼊参的⽅法;
execution(* *To(..))l
匹配⽬标类所有以To为后缀的⽅法。它匹配NaiveWaiter和NaughtyWaiter的greetTo()和rveTo()⽅法。第⼀个*代表返回类型,⽽*To 代表任意以To为后缀的⽅法;
2)通过类定义切点
execution(*com.baobaotao.Waiter.*(..))l
匹配Waiter接⼝的所有⽅法,它匹配NaiveWaiter和NaughtyWaiter类的greetTo()和rveTo()⽅法。第⼀个*代表返回任意类
型,com.baobaotao.Waiter.*代表Waiter接⼝中的所有⽅法;
execution(*com.baobaotao.Waiter+.*(..))l
匹配Waiter接⼝及其所有实现类的⽅法,它不但匹配NaiveWaiter和NaughtyWaiter类的greetTo()和rveTo()这两个Waiter接⼝定义的⽅法,同时还匹配NaiveWaiter#smile()和NaughtyWaiter#joke()这两个不在Waiter接⼝中定义的⽅法。
3)通过类包定义切点
南无大势至菩萨在类名模式串中,“.*”表⽰包下的所有类,⽽“..*”表⽰包、⼦孙包下的所有类。
execution(* com.baobaotao.*(..))l
匹配com.baobaotao包下所有类的所有⽅法;
execution(* com.baobaotao..*(..))l
匹配com.baobaotao包、⼦孙包下所有类的所有⽅法,如com.baobaotao.dao,com.baobaotao.rvier以及
com.baobaotao.dao.ur包下的所有类的所有⽅法都匹配。“..”出现在类名中时,后⾯必须跟“*”,表⽰包、⼦孙包下的所有类;
execution(* com..*.*Dao.find*(..))l
匹配包名前缀为com的任何包下类名后缀为Dao的⽅法,⽅法名必须以find为前缀。如com.baobaotao.UrDao#findByUrId()、com.baobaotao.dao.ForumDao#findById()的⽅法都匹配切点。
4)通过⽅法⼊参定义切点
切点表达式中⽅法⼊参部分⽐较复杂,可以使⽤“*”和“..”通配符,其中“*”表⽰任意类型的参数,⽽“..”表⽰任意类型参数且参数个数不限。
execution(* joke(String,int)))l
菡是什么意思
匹 配joke(String,int)⽅法,且joke()⽅法的第⼀个⼊参是String,第⼆个⼊参是int。它匹配NaughtyWaiter#joke(String,int)⽅法。如果⽅法中的⼊参类型是Java.lang包下的类,可以直接使⽤类名,否则必须使⽤全限定类名,如joke(java.util.List,int);
execution(* joke(String,*)))l
匹 配⽬标类中的joke()⽅法,该⽅法第⼀个⼊参为String,第⼆个⼊参可以是任意类型,如joke(Strings1,String s2)和joke(String
s1,double d2)都匹配,但joke(String s1,doubled2,String s3)则不匹配;
execution(* joke(String,..)))l
匹配⽬标类中的joke()⽅法,该⽅法第 ⼀个⼊参为String,后⾯可以有任意个⼊参且⼊参类型不限,如joke(Strings1)、joke(String
s1,String s2)和joke(String s1,double d2,Strings3)都匹配。
execution(* joke(Object+)))
匹 配⽬标类中的joke()⽅法,⽅法拥有⼀个⼊参,且⼊参是Object类型或该类的⼦类。它匹配joke(Strings1)和joke(Client c)。如果我们定义的切点是execution(*joke(Object)),则只匹配joke(Object object)⽽不匹配joke(Stringcc)或joke(Client c)。
------------------------------------------------------------------------------
2.官⽅解释及举例
迟重瑞简历
------------------------------------------------------------------------------