【问题标题】:AspectJ Pointcut matching patternAspectJ 切入点匹配模式
【发布时间】:2017-04-06 19:07:05
【问题描述】:

我已经编写了一个切入点,它将在执行某个方法时调用周围的建议。

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

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

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

有效的模式是:

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

用谷歌搜索*.*..*. 之间的区别被证明有些困难。如果有人可以提供解释或解释差异的资源,我将非常感激。

【问题讨论】:

    标签: java aspectj


    【解决方案1】:

    文档中有解释:

    AspectJ Type Patterns

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

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

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

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

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

    @AspectJ cheat sheet

    【讨论】:

    • 顺便说一句,这也意味着你不需要*..*.AuthFilter,但*..AuthFilter就足够了。
    • 谢谢你,这是一个很好的解释,谢谢你的链接
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 2012-07-30
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多