如何使用AspectJ过滤方法的返回值?
我想过滤具有 @Filter
注释的方法的返回值并返回 Collection
、Array
或 Map< /code> 通过某个谓词。
我尝试过类似的操作:
@Pointcut("execution(@example.annotations.Filter * *(..)) "
+ "&& @annotation(filter) ")
public void filterOperation(final Filter filter) {
/* ... */
}
但是如果我将 execution((java.util.Collection+ || java.util.Map+) * * (..))
添加到上面的 PointCut,则会出现语法错误。
如果某个方法用 @Filter
注释但不会返回集合,那么解决方案会是什么样子,最好是我可能会出错的解决方案?
I would like to filter return values of methods which have a @Filter
annotation and return a Collection
, an Array
or a Map
by a certain predicate.
I tried something like:
@Pointcut("execution(@example.annotations.Filter * *(..)) "
+ "&& @annotation(filter) ")
public void filterOperation(final Filter filter) {
/* ... */
}
But I get syntax errors if I add execution((java.util.Collection+ || java.util.Map+) * * (..))
to the PointCut above.
How would a solution look like, preferable one where I could error out if some method was annotated with @Filter
but would not return a collection?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您是否尝试过使用
execution((java.util.Collection+ || java.util.Map+) *.* (..))
?或者您可以使用:
您可以按以下方式处理返回值:
但我认为对 Map 和 Collection 使用单独的建议会更好:
Did you tried to use
execution((java.util.Collection+ || java.util.Map+) *.* (..))
?Or you can use:
You can handle return value the following way:
But I suppose it will be better to use separate advices for
Map
s andCollection
s: