execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
除了返回類(lèi)型模式(上面代碼片斷中的ret-type-pattern),名字模式和參數(shù)模式以外,所有的部分都是可選的。 返回類(lèi)型模式?jīng)Q定了方法的返回類(lèi)型必須依次匹配一個(gè)連接點(diǎn)。 你會(huì)使用的最頻繁的返回類(lèi)型模式是 *,它代表了匹配任意的返回類(lèi)型。 一個(gè)全稱(chēng)限定的類(lèi)型名將只會(huì)匹配返回給定類(lèi)型的方法。名字模式匹配的是方法名。 你可以使用 * 通配符作為所有或者部分命名模式。 參數(shù)模式稍微有點(diǎn)復(fù)雜:() 匹配了一個(gè)不接受任何參數(shù)的方法, 而 (..) 匹配了一個(gè)接受任意數(shù)量參數(shù)的方法(零或者更多)。 模式 (*) 匹配了一個(gè)接受一個(gè)任何類(lèi)型的參數(shù)的方法。 模式 (*,String) 匹配了一個(gè)接受兩個(gè)參數(shù)的方法,第一個(gè)可以是任意類(lèi)型,第二個(gè)則必須是String類(lèi)型。
下面給出一些常見(jiàn)切入點(diǎn)表達(dá)式的例子。
任意公共方法的執(zhí)行:
execution(public * *(..))
任何一個(gè)以“set”開(kāi)始的方法的執(zhí)行:
execution(* set*(..))
AccountService 接口的任意方法的執(zhí)行:
execution(* com.xyz.service.AccountService.*(..))
定義在service包里的任意方法的執(zhí)行:
execution(* com.xyz.service.*.*(..))
定義在service包或者子包里的任意方法的執(zhí)行:
execution(* com.xyz.service..*.*(..))
在service包里的任意連接點(diǎn)(在Spring AOP中只是方法執(zhí)行) :
within(com.xyz.service.*)
在service包或者子包里的任意連接點(diǎn)(在Spring AOP中只是方法執(zhí)行) :
within(com.xyz.service..*)
實(shí)現(xiàn)了 AccountService 接口的代理對(duì)象的任意連接點(diǎn)(在Spring AOP中只是方法執(zhí)行) :
this(com.xyz.service.AccountService)
'this'在binding form中用的更多:- 請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得代理對(duì)象可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。
實(shí)現(xiàn)了 AccountService 接口的目標(biāo)對(duì)象的任意連接點(diǎn)(在Spring AOP中只是方法執(zhí)行) :
target(com.xyz.service.AccountService)
'target'在binding form中用的更多:- 請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得目標(biāo)對(duì)象可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。
任何一個(gè)只接受一個(gè)參數(shù),且在運(yùn)行時(shí)傳入的參數(shù)實(shí)現(xiàn)了 Serializable 接口的連接點(diǎn) (在Spring AOP中只是方法執(zhí)行)
args(java.io.Serializable)
'args'在binding form中用的更多:- 請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得方法參數(shù)可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。 請(qǐng)注意在例子中給出的切入點(diǎn)不同于 execution(* *(java.io.Serializable)): args只有在動(dòng)態(tài)運(yùn)行時(shí)候傳入?yún)?shù)是可序列化的(Serializable)才匹配,而execution 在傳入?yún)?shù)的簽名聲明的類(lèi)型實(shí)現(xiàn)了 Serializable 接口時(shí)候匹配。
有一個(gè) @Transactional 注解的目標(biāo)對(duì)象中的任意連接點(diǎn)(在Spring AOP中只是方法執(zhí)行)
@target(org.springframework.transaction.annotation.Transactional)
'@target' 也可以在binding form中使用:請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得annotation對(duì)象可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。
任何一個(gè)目標(biāo)對(duì)象聲明的類(lèi)型有一個(gè) @Transactional 注解的連接點(diǎn)(在Spring AOP中只是方法執(zhí)行)
@within(org.springframework.transaction.annotation.Transactional)
'@within'也可以在binding form中使用:- 請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得annotation對(duì)象可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。
任何一個(gè)執(zhí)行的方法有一個(gè) @Transactional annotation的連接點(diǎn)(在Spring AOP中只是方法執(zhí)行)
@annotation(org.springframework.transaction.annotation.Transactional)
'@annotation' 也可以在binding form中使用:- 請(qǐng)常見(jiàn)以下討論通知的章節(jié)中關(guān)于如何使得annotation對(duì)象可以在通知體內(nèi)訪(fǎng)問(wèn)到的部分。
任何一個(gè)接受一個(gè)參數(shù),并且傳入的參數(shù)在運(yùn)行時(shí)的類(lèi)型實(shí)現(xiàn)了 @Classified annotation的連接點(diǎn)(在Spring AOP中只是方法執(zhí)行)
@args(com.xyz.security.Classified)
本文來(lái)自CSDN博客,http://blog.csdn.net/terryzero/archive/2009/04/27/4128858.aspx