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你需要一个关于的或返回后的建议。