下面給出一些常見切入點表達式的例子。
任意公共方法的執行:
execution(public * *(..))
任何一個以“set”開始的方法的執行:
execution(* set*(..))
AccountService 接口的任意方法的執行:
execution(* com.xyz.service.AccountService.*(..))
定義在service包里的任意方法的執行:
execution(* com.xyz.service.*.*(..))
定義在service包或者子包里的任意方法的執行:
execution(* com.xyz.service..*.*(..))
在service包里的任意連接點(在Spring AOP中只是方法執行) :
within(com.xyz.service.*)
在service包或者子包里的任意連接點(在Spring AOP中只是方法執行) :
within(com.xyz.service..*)
實現了 AccountService 接口的代理對象的任意連接點(在Spring AOP中只是方法執行) :
this(com.xyz.service.AccountService)
'this'在binding form中用的更多:- 請常見以下討論通知的章節中關於如何使得代理對象可以在通知體內訪問到的部分。實現了 AccountService 接口的目標對象的任意連接點(在Spring AOP中只是方法執行) :
target(com.xyz.service.AccountService)
'target'在binding form中用的更多:- 請常見以下討論通知的章節中關於如何使得目標對象可以在通知體內訪問到的部分。任何一個只接受一個參數,且在運行時傳入的參數實現了 Serializable 接口的連接點 (在Spring AOP中只是方法執行)
args(java.io.Serializable)
'args'在binding form中用的更多:- 請常見以下討論通知的章節中關於如何使得方法參數可以在通知體內訪問到的部分。請注意在例子中給出的切入點不同於 execution(* *(java.io.Serializable)): args只有在動態運行時候傳入參數是可序列化的(Serializable)才匹配,而execution 在傳入參數的簽名聲明的類型實現了 Serializable 接口時候匹配。
有一個 @Transactional 注解的目標對象中的任意連接點(在Spring AOP中只是方法執行)
@target(org.springframework.transaction.annotation.Transactional)
'@target' 也可以在binding form中使用:請常見以下討論通知的章節中關於如何使得annotation對象可以在通知體內訪問到的部分。任何一個目標對象聲明的類型有一個 @Transactional 注解的連接點(在Spring AOP中只是方法執行)
@within(org.springframework.transaction.annotation.Transactional)
'@within'也可以在binding form中使用:- 請常見以下討論通知的章節中關於如何使得annotation對象可以在通知體內訪問到的部分。任何一個執行的方法有一個 @Transactional annotation的連接點(在Spring AOP中只是方法執行)
@annotation(org.springframework.transaction.annotation.Transactional)
'@annotation' 也可以在binding form中使用:- 請常見以下討論通知的章節中關於如何使得annotation對象可以在通知體內訪問到的部分。任何一個接受一個參數,並且傳入的參數在運行時的類型實現了 @Classified annotation的連接點(在Spring AOP中只是方法執行)
@args(com.xyz.security.Classified)
'@args'