我已经编写了一个切入点,可以调用关于执行某种方法的建议。
但是,我想明白为什么我使用的最终模式有效,但初始模式没有。
我使用的初始模式(不起作用)是:
pointcut timeIt() : execution(* *.AuthFilter.filter(..));
有效的模式是:
pointcut timeIt() : execution(* *..*.AuthFilter.filter(..));
尝试将Google *.
和*..*.
之间的差异证明具有一定的挑战性。如果有人能够提供解释差异的解释或资源,我将非常感激。
答案 0 :(得分:2)
文档说明:
标识符中的嵌入*匹配任何字符序列,但是 与包(或内部类型)分隔符“。”。
不匹配标识符中的embedded ..匹配任何字符序列 以包(或内部类型)分隔符“。”开始和结束。
基本上,在包级别使用时,..
表示任何子包。
您的第一个表达式仅匹配AuthFilter
位于第二级,例如org.AuthFilter
,但它与org.security.AuthFilter
不匹配,在这种情况下您需要*.*.AuthFilter
}。
您的第二个表达式匹配AuthFilter
,无论它在哪里。它所包含的包和子包并不重要。