我正在编写自定义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
方法处理。如何将它们都用于一个注解?
我已经自己解决了这个问题。我只需要在Object response
方法中使用ResponseWithStatus response
而不是afterReturning()