AspectJ и Spring AOC - PullRequest
0 голосов

Я пишу собственный обработчик метода АОП, и у меня есть два метода с разными аннотациями:

@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. Как я могу использовать их обоих для ОДНОЙ аннотации?

1 Ответ

0 голосов

Я решил проблему сам. Мне просто нужно использовать Object response вместо ResponseWithStatus response в моем afterReturning() методе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...