Aspectj execution表達(dá)式

Aspectj切入點(diǎn)語法定義

在使用spring框架配置AOP的時(shí)候,不管是通過XML配置文件還是注解的方式都需要定義pointcut"切入點(diǎn)"

例如定義切入點(diǎn)表達(dá)式 execution (* com.sample.service.impl...(..))

execution()是最常用的切點(diǎn)函數(shù),其語法如下所示:

整個(gè)表達(dá)式可以分為五個(gè)部分:

1享幽、execution(): 表達(dá)式主體奔坟。

2澜建、第一個(gè)號(hào):表示返回類型何之,號(hào)表示所有的類型。

3、包名:表示需要攔截的包名略就,后面的兩個(gè)句點(diǎn)表示當(dāng)前包和當(dāng)前包的所有子包崔兴,com.sample.service.impl包堰燎、子孫包下所有類的方法仅讽。

4徽千、第二個(gè)號(hào):表示類名,號(hào)表示所有的類。

5、(..):最后這個(gè)星號(hào)表示方法名有决,號(hào)表示所有的方法,后面括弧里面表示方法的參數(shù)俐筋,兩個(gè)句點(diǎn)表示任何參數(shù)腰奋。

AspectJ的Execution表達(dá)式

execution()

execution()是最常用的切點(diǎn)函數(shù)局冰,其語法如下所示:

execution(<修飾符模式>? <返回類型模式> <方法名模式>(<參數(shù)模式>) <異常模式>?)
除了返回類型模式沫勿、方法名模式和參數(shù)模式外蔓挖,其它項(xiàng)都是可選的。與其直接講解該方法的使用規(guī)則咽扇,還不如通過一個(gè)個(gè)具體的例子進(jìn)行理解又碌。下面,我們給出各種使用execution()函數(shù)實(shí)例教馆。

1)通過方法簽名定義切點(diǎn)

execution(public * *(..))l

匹配所有目標(biāo)類的public方法镀迂,但不匹配SmartSeller和protected void showGoods()方法。第一個(gè)代表返回類型掘殴,第二個(gè)代表方法名,而..代表任意入?yún)⒌姆椒ǎ?/p>

execution(* *To(..))l

匹配目標(biāo)類所有以To為后綴的方法逗爹。它匹配NaiveWaiter和NaughtyWaiter的greetTo()和serveTo()方法。第一個(gè)代表返回類型,而To代表任意以To為后綴的方法么夫;

2)通過類定義切點(diǎn)

execution(* com.baobaotao.Waiter.*(..))l

匹配Waiter接口的所有方法尼桶,它匹配NaiveWaiter和NaughtyWaiter類的greetTo()和serveTo()方法久窟。第一個(gè)代表返回任意類型入问,com.baobaotao.Waiter.代表Waiter接口中的所有方法颊糜;

execution(* com.baobaotao.Waiter+.*(..))l

匹 配Waiter接口及其所有實(shí)現(xiàn)類的方法,它不但匹配NaiveWaiter和NaughtyWaiter類的greetTo()和serveTo()這 兩個(gè)Waiter接口定義的方法,同時(shí)還匹配NaiveWaiter#smile()和NaughtyWaiter#joke()這兩個(gè)不在Waiter 接口中定義的方法妖啥。

3)通過類包定義切點(diǎn)

在類名模式串中诉位,“.”表示包下的所有類岳瞭,而“..”表示包、子孫包下的所有類苍柏。

execution(* com.baobaotao.*(..))l

匹配com.baobaotao包下所有類的所有方法;

execution(* com.baobaotao..*(..))l

匹 配com.baobaotao包熄捍、子孫包下所有類的所有方法,如com.baobaotao.dao余耽,com.baobaotao.servier以及 com.baobaotao.dao.user包下的所有類的所有方法都匹配”倚“..”出現(xiàn)在類名中時(shí)袱耽,后面必須跟“*”,表示包朱巨、子孫包下的所有類;

execution(* com...Dao.find*(..))l

匹配包名前綴為com的任何包下類名后綴為Dao的方法恶座,方法名必須以find為前綴沥阳。如com.baobaotao.UserDao#findByUserId()跨琳、com.baobaotao.dao.ForumDao#findById()的方法都匹配切點(diǎn)桐罕。

4)通過方法入?yún)⒍x切點(diǎn)

切點(diǎn)表達(dá)式中方法入?yún)⒉糠直容^復(fù)雜,可以使用“”和“ ..”通配符溅潜,其中“”表示任意類型的參數(shù)薪伏,而“..”表示任意類型參數(shù)且參數(shù)個(gè)數(shù)不限。

execution(* joke(String,int)))l

匹 配joke(String,int)方法嫁怀,且joke()方法的第一個(gè)入?yún)⑹荢tring,第二個(gè)入?yún)⑹莍nt萝招。它匹配 NaughtyWaiter#joke(String,int)方法存捺。如果方法中的入?yún)㈩愋褪莏ava.lang包下的類槐沼,可以直接使用類名,否則必須使用全限定類名纽窟,如joke(java.util.List,int)兼吓;

execution(* joke(String,*)))l

匹 配目標(biāo)類中的joke()方法,該方法第一個(gè)入?yún)镾tring周蹭,第二個(gè)入?yún)⒖梢允侨我忸愋推;郑鏹oke(String s1,String s2)和joke(String s1,double d2)都匹配,但joke(String s1,double d2,String s3)則不匹配棚愤;

execution(* joke(String,..)))l

匹配目標(biāo)類中的joke()方法杂数,該方法第 一個(gè)入?yún)镾tring宛畦,后面可以有任意個(gè)入?yún)⑶胰雲(yún)㈩愋筒幌拮嵋疲鏹oke(String s1)、joke(String s1,String s2)和joke(String s1,double d2,String s3)都匹配踏施。

execution(* joke(Object+)))l

匹 配目標(biāo)類中的joke()方法罕邀,方法擁有一個(gè)入?yún)ⅲ胰雲(yún)⑹荗bject類型或該類的子類诉探。它匹配joke(String s1)和joke(Client c)。如果我們定義的切點(diǎn)是execution(* joke(Object))肾胯,則只匹配joke(Object object)而不匹配joke(String cc)或joke(Client c)竖席。

args()和@args()

args()函數(shù)的入?yún)⑹穷惷炊牵珸args()函數(shù)的入?yún)⒈仨毷亲⒔忸惖念惷km然args()允許在類名后使用+通配符后綴东跪,但該通配符在此處沒有意義:添加和不添加效果都一樣。

1)args()

該函數(shù)接受一個(gè)類名虽填,表示目標(biāo)類方法入?yún)?duì)象按類型匹配于指定類時(shí),切點(diǎn)匹配牲览,如下面的例子:

args(com.baobaotao.Waiter)

表 示運(yùn)行時(shí)入?yún)⑹荳aiter類型的方法恶守,它和execution(* (com.baobaotao.Waiter))區(qū)別在于后者是針對(duì)類方法的簽名而言的,而前者則針對(duì)運(yùn)行時(shí)的入?yún)㈩愋投酝酶邸H?args(com.baobaotao.Waiter)既匹配于addWaiter(Waiter waiter),也匹配于addNaiveWaiter(NaiveWaiter naiveWaiter)衫樊,而execution( (com.baobaotao.Waiter))只匹配addWaiter(Waiter
waiter)方法;實(shí)際上载佳,args(com.baobaotao.Waiter)等價(jià)于execution(
*(com.baobaotao.Waiter+))臀栈,當(dāng)然也等價(jià)于args(com.baobaotao.Waiter+)。

2)@args()

該函數(shù)接受一個(gè)注解類的類名权薯,當(dāng)方法的運(yùn)行時(shí)入?yún)?duì)象標(biāo)注發(fā)指定的注解時(shí),方法匹配切點(diǎn)肋联。這個(gè)切點(diǎn)函數(shù)的匹配規(guī)則不太容易理解刁俭,我們通過以下示意圖對(duì)此進(jìn)行詳細(xì)講解:

image.png

轉(zhuǎn)自:https://blog.csdn.net/lang_niu/article/details/51559994

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市侮繁,隨后出現(xiàn)的幾起案子如孝,更是在濱河造成了極大的恐慌,老刑警劉巖第晰,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彬祖,死亡現(xiàn)場離奇詭異品抽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)突倍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門盆昙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淡喜,你說我怎么就攤上這事√玻” “怎么了们镜?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵润歉,是天一觀的道長。 經(jīng)常有香客問我踩衩,道長,這世上最難降的妖魔是什么锚赤? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任褐鸥,我火速辦了婚禮,結(jié)果婚禮上叫榕,老公的妹妹穿的比我還像新娘。我一直安慰自己寓落,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布伶选。 她就那樣靜靜地躺著,像睡著了一般祸憋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚯窥,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天塞帐,我揣著相機(jī)與錄音,去河邊找鬼葵姥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛允乐,可吹牛的內(nèi)容都是我干的削咆。 我是一名探鬼主播牍疏,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鳞陨,長吁一口氣:“原來是場噩夢啊……” “哼瞻惋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起歼狼,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趟咆,沒想到半個(gè)月后限寞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忍啸,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡计雌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年玫霎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妈橄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翁脆。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖反番,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篙贸,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布爵川,位于F島的核電站息楔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏值依。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一洞焙、第九天 我趴在偏房一處隱蔽的房頂上張望拯啦。 院中可真熱鬧熔任,春花似錦褒链、人聲如沸疑苔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薪贫。三九已至恍箭,卻和暖如春瞧省,著一層夾襖步出監(jiān)牢的瞬間鳍贾,已是汗流浹背交洗。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留构拳,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓伍掀,卻偏偏與公主長得像暇藏,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盐碱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.Spring對(duì)AOP的支持 新增了基于Schema的配置支持瓮顽,為AOP專門提供了aop命名空間 新增了對(duì)Asp...
    小螺釘12138閱讀 842評(píng)論 0 2
  • @annotation() @annotation(<注解>) :匹配 標(biāo)注了<注解>的方法 execution(...
    一路搖到頂閱讀 677評(píng)論 0 0
  • 不會(huì)上色,嗯(⊙_⊙)不過缕贡,自我感覺良好拣播,哈哈哈晾咪! 描線不可耐了 還是覺得鉛筆的好看些
    五里小徘徊閱讀 273評(píng)論 0 2
  • 宏村是我一直列在旅游計(jì)劃里的地方谍倦,這次終于有機(jī)會(huì)見到它。 說起中國畫一樣的地方昼蛀,大多數(shù)人會(huì)想到蘇杭一帶〉鹦“煙柳畫橋...
    一只銀耳啊閱讀 809評(píng)論 0 2
  • 【月下獨(dú)酌 李白 】花間一壺酒沦辙,獨(dú)酌無相親。舉杯邀明月怕轿,對(duì)影成三人辟拷。 月既不解飲,影徒隨我身阐斜。暫伴月將影,行樂須及...
    一冉山閱讀 563評(píng)論 5 4