我想过滤具有 @Filter
注释的方法的返回值,并返回一个 Collection
、一个 Array
或一个 通过某个谓词映射
。
我试过类似的方法:
@Pointcut("execution(@example.annotations.Filter * *(..)) "
+ "&& @annotation(filter) ")
public void filterOperation(final Filter filter) {
/* ... */
}
但是如果我将 execution((java.util.Collection+ || java.util.Map+) * * (..))
添加到上面的 PointCut,我会得到语法错误。
如果某些方法用 @Filter
注释但不会返回集合,我可能会出错的解决方案看起来如何?
最佳答案
您是否尝试过使用 execution((java.util.Collection+ || java.util.Map+) *.* (..))
?
或者你可以使用:
@Pointcut("execution(@example.annotations.Filter java.util.Collection+ || java.util.Map+ *(..)) "
+ "&& @annotation(filter) ")
public void filterOperation(final Filter filter) {
/* ... */
}
您可以通过以下方式处理返回值:
@AfterReturning(value="filterOperation(filter)", returning="collection")
public void handlingReturnValue(final Filter filter, Object collection) {
System.out.println(collection);
}
但我认为对 Map
和 Collection
使用单独的建议会更好:
@Pointcut("execution(@Filter java.util.Collection+ *(..)) "
+ "&& @annotation(filter) ")
public void filterCollection(final Filter filter) {
/* ... */
}
@Pointcut("execution(@Filter java.util.Map+ *(..)) "
+ "&& @annotation(filter) ")
public void filterMap(final Filter filter) {
/* ... */
}
@AfterReturning(value="filterCollection(filter)", returning="collection")
public void handlingReturnCollection(final Filter filter, Collection collection) {
System.out.println(collection);
}
@AfterReturning(value="filterMap(filter)", returning="map")
public void handlingReturnMap(final Filter filter, Map map) {
System.out.println(map);
}
关于java - 如何使用 AspectJ 过滤方法的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240853/