如何在 AspectJ 中将方法与带注释的参数相匹配

发布于 2024-12-01 17:13:29 字数 423 浏览 1 评论 0原文

我想匹配这样的方法:

@Foo
public void boo(@Baz Bar bar) { ... }

基本上:

  • 该方法有一个 @Foo 注释(我与 execution(@Foo * *(..)) && 匹配@annotation(foo)),
  • 可以有可变数量的参数,
  • 其中一个应该有 @Baz 注释,
  • 我需要进一步处理该带注释的参数 ()。

如果一个方法具有 @Foo 注释,但缺少 @Baz 注释,我希望尽早收到错误,如果可能的话,在编织时而不是在运行时。

我怎样才能做到这一点?

I'd like to match a method like this:

@Foo
public void boo(@Baz Bar bar) { ... }

Basically:

  • the method has a @Foo annotation (which I match with execution(@Foo * *(..)) && @annotation(foo)),
  • can have a variable amount of parameters,
  • and one of them should have a @Baz annotation,
  • I need to further work with that annotated argument (bar).

If a method has a @Foo annotation but is missing a @Baz annotation, I want to get an error as early as possible, if possible when weaving and not at runtime.

How can I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴梦一场 2024-12-08 17:13:29
public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..));

declare error :execution(@Foo * *(..))&&!annArg() :"error";

不幸的是,不可能通过 args(..,arg,..) 获取匹配的参数。但是您可以使用 thisJoinPoint.getArgs() 和反射 API 来获取带注释的参数。或者,如果您知道参数的位置,则可以使用类似 args(..,arg); 的内容。

public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..));

declare error :execution(@Foo * *(..))&&!annArg() :"error";

Unfortunatly it is impossible to grab matched argument by args(..,arg,..). But you can use thisJoinPoint.getArgs() and reflection API to get the annotated argument. Or if you know the position of the argument you can use something like args(..,arg);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文