如何在 AspectJ 中将方法与带注释的参数相匹配
我想匹配这样的方法:
@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 withexecution(@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不幸的是,不可能通过 args(..,arg,..) 获取匹配的参数。但是您可以使用 thisJoinPoint.getArgs() 和反射 API 来获取带注释的参数。或者,如果您知道参数的位置,则可以使用类似 args(..,arg); 的内容。
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);