根据返回值调用方面

时间:2018-01-08 10:33:04

标签: java aop spring-aop pointcut

我正在使用Spring AOP。这是示例方法:

public String method(List<Integer> ids) {
    if(ids == null) return "ERROR";
    else return "OK";
}

我的方面如下:

@AfterReturning(pointcut = "execution( * com.pack.MyService.method(..))", returning = "result")
public void methodAdvice(JoinPoint joinPoint, String result) {
    // My implementation
}

是否可以根据method()的retunt值调用或不调用aspect方法?提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以考虑抛出异常,而不是从函数返回错误值。如果你要抛出异常,你可能会考虑做这样的事情。

让我们再次重写你的功能。

public String method(List<Integer> ids) throws Exception {
    if(ids == null)
        throw new RunTimeException("ERROR");

    return "OK";
}

现在您的方面看起来像这样。

@AfterThrowing(pointcut = "class() && execution( * com.pack.MyService.method(..))", throwing = "ex")
public void onMethodExecutionFailure(Exception ex) {
    log.debug(ex.getMessage());
    // Your implementation
}

@AfterReturning(pointcut = "execution( * com.pack.MyService.method(..))")
public void onMethodExecutionSuccess(String result) {
    log.debug("Success!");
    // Your success implementation
}

pointcut和函数的参数只是例如。请根据需要修改它们。希望有所帮助。

答案 1 :(得分:0)

我认为你可以把你的“if / else逻辑”放在你的方法调用中,它可以从你的方法调用得到结果,如果结果是“ERROR”,只返回,或者做其他逻辑。