AspectJ and Spring AOC



我正在编写一个自定义的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方法处理。我怎样才能将它们都用于一个注释?

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

最新更新