2017-04-06 76 views
0

我写了一个切入点,它将调用某个方法执行的周围建议。AspectJ切入点匹配模式

但是,我想明白为什么我使用的最终模式工作,但最初的模式没有。

,我使用(没有工作)最初的模式是:

pointcut timeIt() : execution(* *.AuthFilter.filter(..)); 

,工程模式是:

pointcut timeIt() : execution(* *..*.AuthFilter.filter(..)); 

试图谷歌*.*..*.之间的差异已经证明有些挑战。如果有人能提供解释或解释差异的资源,我将非常感激。

回答

2

它是由文档解释:

AspectJ Type Patterns

嵌入式*在一个标识符匹配任何字符序列,但 包(或内型)的分离器”不匹配。 ”。

标识符中的嵌入符匹配任何以包(或内部类型)分隔符“。”开头和结尾的字符序列 。

基本上,当在包级别使用时,..表示任何子包。

你的第一只表达匹配,如果AuthFilter是在第二个层次,例如,org.AuthFilter,但它不会匹配org.security.AuthFilter,在这种情况下,你需要*.*.AuthFilter

无论它在哪里,你的第二个表达式都是匹配AuthFilter。不要紧,它是在包装和分包装。

@AspectJ cheat sheet

+1

顺便说一句,这也意味着你不需要'*。*。AuthFilter',但'* .. AuthFilter'就足够了。 – kriegaex

+0

谢谢,这是一个很好的解释,并感谢您的链接 – James