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

Java 如何使用AspectJ过滤方法的返回值?,java,methods,annotations,aspectj,signature,Java,Methods,Annotations,Aspectj,Signature,我想过滤具有@filter注释的方法的返回值,并通过某个谓词返回集合、数组或映射 我试过这样的方法: @Pointcut("execution(@example.annotations.Filter * *(..)) " + "&& @annotation(filter) ") public void filterOperation(final Filter filter) { /* ... */ } 但是如果我将

我想过滤具有
@filter
注释的方法的返回值,并通过某个谓词返回
集合
、数组或映射

我试过这样的方法:

    @Pointcut("execution(@example.annotations.Filter * *(..)) "
            + "&& @annotation(filter) ")
    public void filterOperation(final Filter filter) {
        /* ... */
    }
但是如果我将
执行((java.util.Collection+| | java.util.Map+**(..)添加到上面的切入点)中,就会出现语法错误


如果某个方法被注释为
@Filter
,但不返回集合,那么解决方案会是什么样的呢?

您是否尝试使用
执行((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
s和
Collection
s使用单独的建议:

@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);
}

现在它说“名称模式”应该是现在编译的
,但是我实际上如何访问返回的值呢?我再次修改了我的答案:)@soc你需要一个关于的或返回后的建议。