java - 如何使用 AspectJ 过滤方法的返回值?

标签 java methods annotations aspectj signature

我想过滤具有 @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);
}

但我认为对 MapCollection 使用单独的建议会更好:

@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/

相关文章:

java - 从字段元素获取包名称和参数化类型 - 注释处理器

java - 当我在 eclipse 中测试 java GUI 时,如何知道调用了哪个方法/类?

python - 方法调用解析为类上的函数调用

java - 返回动态对象类型的通用方法

java - 如何从索引处的数组中删除项目?

Python返回类型注释

php - symfony2学说注释【语义错误】

java - 如何在 java 中创建一个通用的单例类?

java - 使用 java 将电子邮件转换为其原始格式

java - 查找java程序中方法数的程序