【问题标题】:Is there an AspectJ pointcut expression that searches all subpackages?是否有搜索所有子包的 AspectJ 切入点表达式?
【发布时间】:2015-03-19 04:25:09
【问题描述】:

所以我有一个用以下表达式声明的方法的方面:

@Before("execution(* aaa.bbb.ccc.*.*(..))")

这适用于包aaa.bbb.ccc 中的所有类。但是,现在我想捕获aaa.bbb 中的所有类,包括aaa.bbb.ccc 中的那些。所以我试着把它备份到这里:

@Before("execution(* aaa.bbb.*.*(..))")

不过,这只会抓取来自aaa.bbb 的类,而忽略来自aaa.bbb.ccc 的类。有没有办法让表达式递归搜索所有子包?

【问题讨论】:

    标签: java expression aop aspectj spring-aop


    【解决方案1】:

    知道了!文本变化出人意料地微不足道。

    @Before("execution(* aaa.bbb.*.*(..))")
    

    ...变成...

    @Before("execution(* aaa.bbb..*.*(..))")
    

    只需在包名称和限定符之间添加额外的句点,您就可以参加比赛了。

    我在进行更改后遇到的一个问题是整个 Spring 都崩溃了。这是因为切面本身aaa.bbb的子包中。因此,如果您这样做,请确保使用 !within 子句来免除您的方面尝试自行处理。

    【讨论】:

    • 这是文档中涵盖的基本内容。无论如何,很高兴你自己找到了它。您可以通过省略一个点和一个星来优化它:execution(* aaa.bbb..*(..))
    • @kriegaex 你能告诉我这是在哪里的文档吗?我在谷歌上搜索了很久才来这里问。
    • 查看Programming Guide中的“类型名称模式”。
    • 您还可以搜索字符串..*,以便在AspectJ 5 Developer's NotebookDevelopment Environment GuideFAQ 中查找引用。我承认大多数提及都是相当间接的,但我之前评论中的提及是明确的,尽管可能不容易找到。
    • Spring AOP documentation, section "Examples"中也提到了语法模式。
    猜你喜欢
    • 2015-10-25
    • 2014-11-17
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多