AspectJ和Spring AOC

问题描述 投票:0回答:1

我正在编写自定义AOP方法处理程序,并且我有两个带有不同批注的方法:

@AfterReturning(value = "@annotation(Metric)", returning = "response")
public void afterReturning(JoinPoint joinPoint, ResponseWithStatus response) {
    final Signature signature = joinPoint.getSignature();
    final int responseStatus = response.getStatus();
    metrics.putIfAbsent(signature, resultCounters);
    if (responseStatus == ResponseStatus.SUCCESS.getValue()) {
        System.out.println("Method " + signature + " returned its result");
        metrics.get(signature).get(SUCCESS).increment();
    } else if (errorCodes.contains(responseStatus)) {
        System.out.println("Method " + signature + " returned error");
        metrics.get(signature).get(ERROR).increment();
    } else if (businessErrorCodes.contains(responseStatus)) {
        System.out.println("Method " + signature + " returned business error");
        metrics.get(signature).get(BUSINESS_ERROR).increment();
    }
}

@AfterThrowing(value = "@annotation(Metric)", throwing = "exception")
public void afterThrowing(JoinPoint joinPoint, Exception exception) {
    final Signature signature = joinPoint.getSignature();
    final Class<? extends Exception> exceptionClass = exception.getClass();
    final String exceptionName = exceptionClass.getName();
    metrics.putIfAbsent(signature, resultCounters);
    if (exceptionClass.equals(ValidationWebFault_Exception.class)) {
        System.out.println("Method " + signature + " threw " + exceptionName);
        metrics.get(signature).get(ERROR).increment();
    }
}

但是我的方法仅由@AfterThrowing方法处理。如何将它们都用于一个注解?

java aop aspectj spring-aop
1个回答
0
投票

我已经自己解决了这个问题。我只需要在Object response方法中使用ResponseWithStatus response而不是afterReturning()

© www.soinside.com 2019 - 2024. All rights reserved.