有没有一个AspectJ切入点表达式可以搜索所有子包?

9

我有一个方面,其中有一个使用以下表达式声明的方法:

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

这对于包aaa.bbb.ccc中的所有类都很完美地工作。 现在,我想捕获aaa.bbb中的所有类,包括那些在aaa.bbb.ccc中的类。 因此,我尝试将其备份到这里:

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

这段代码仅仅获取了 aaa.bbb 中的类,而忽略了来自 aaa.bbb.ccc 的类。有没有办法让表达式递归地搜索所有子包?

1个回答

23

明白了!文本变更出乎意料地微不足道。

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

...变成了...

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

只需在包名和限定符之间添加额外的句点,然后您就可以轻松处理了。

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


6
这是基础内容,文档已经很详细地讲解了。无论如何,很高兴您自己找到了它。您可以通过省略一个点和一个星号来优化它:execution(* aaa.bbb..*(..)) - kriegaex
@kriegaex,你能告诉我这个在哪里有文档吗?我在谷歌上搜索了很久才来这里问的。 - asteri
2
请在编程指南中查看“类型名称模式”部分。 - kriegaex
你还可以搜索字符串“..*”以查找AspectJ 5 Developer's NotebookDevelopment Environment GuideFAQ中的参考。我承认大多数提及都相当间接,但我之前评论中的那个是明确的,尽管可能不容易找到。 - kriegaex
2
语法模式也在Spring AOP文档的“示例”章节中提到。 - kriegaex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接