AspectJ Pointcut匹配模式

时间:2017-04-06 09:36:39

标签: java aspectj

我已经编写了一个切入点,可以调用关于执行某种方法的建议。

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

我使用的初始模式(不起作用)是:

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

有效的模式是:

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

尝试将Google *.*..*.之间的差异证明具有一定的挑战性。如果有人能够提供解释差异的解释或资源,我将非常感激。

1 个答案:

答案 0 :(得分:2)

文档说明:

AspectJ Type Patterns

  

标识符中的嵌入*匹配任何字符序列,但是   与包(或内部类型)分隔符“。”。

不匹配      

标识符中的embedded ..匹配任何字符序列   以包(或内部类型)分隔符“。”开始和结束。

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

您的第一个表达式仅匹配AuthFilter位于第二级,例如org.AuthFilter,但它与org.security.AuthFilter不匹配,在这种情况下您需要*.*.AuthFilter }。

您的第二个表达式匹配AuthFilter,无论它在哪里。它所包含的包和子包并不重要。

@AspectJ cheat sheet