AspectJ 切入点匹配模式

AspectJ Pointcut matching pattern

我写了一个切入点,它将在执行某个方法时调用环绕建议。

但是,我想确切地了解为什么我使用的最终模式有效,而初始模式却没有。

我使用的初始模式(没有用)是:

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

有效的模式是:

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

尝试 Google *.*..*. 之间的差异证明有些挑战性。如果有人可以提供解释或资源来解释差异,我将不胜感激。

文档有解释:

AspectJ Type Patterns

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 无论它在哪里。它所在的包和子包无关紧要。

@AspectJ cheat sheet