AspectJ 切入点匹配模式
AspectJ Pointcut matching pattern
我写了一个切入点,它将在执行某个方法时调用环绕建议。
但是,我想确切地了解为什么我使用的最终模式有效,而初始模式却没有。
我使用的初始模式(没有用)是:
pointcut timeIt() : execution(* *.AuthFilter.filter(..));
有效的模式是:
pointcut timeIt() : execution(* *..*.AuthFilter.filter(..));
尝试 Google *.
和 *..*.
之间的差异证明有些挑战性。如果有人可以提供解释或资源来解释差异,我将不胜感激。
文档有解释:
An embedded * in an identifier matches any sequence of characters, but
does not match the package (or inner-type) separator ".".
An embedded .. in an identifier matches any sequence of characters
that starts and ends with the package (or inner-type) separator ".".
基本上,在包级别使用时,..
表示任何子包。
您的第一个表达式仅在 AuthFilter
处于第二级时才匹配,例如 org.AuthFilter
,但它不会匹配 org.security.AuthFilter
,在这种情况下您需要 *.*.AuthFilter
.
你的第二个表达式匹配 AuthFilter
无论它在哪里。它所在的包和子包无关紧要。
我写了一个切入点,它将在执行某个方法时调用环绕建议。
但是,我想确切地了解为什么我使用的最终模式有效,而初始模式却没有。
我使用的初始模式(没有用)是:
pointcut timeIt() : execution(* *.AuthFilter.filter(..));
有效的模式是:
pointcut timeIt() : execution(* *..*.AuthFilter.filter(..));
尝试 Google *.
和 *..*.
之间的差异证明有些挑战性。如果有人可以提供解释或资源来解释差异,我将不胜感激。
文档有解释:
An embedded * in an identifier matches any sequence of characters, but does not match the package (or inner-type) separator ".".
An embedded .. in an identifier matches any sequence of characters that starts and ends with the package (or inner-type) separator ".".
基本上,在包级别使用时,..
表示任何子包。
您的第一个表达式仅在 AuthFilter
处于第二级时才匹配,例如 org.AuthFilter
,但它不会匹配 org.security.AuthFilter
,在这种情况下您需要 *.*.AuthFilter
.
你的第二个表达式匹配 AuthFilter
无论它在哪里。它所在的包和子包无关紧要。