AfterThrowing совет не работает Spring AOP - PullRequest
2 голосов
/ 15 марта 2012

Я не могу получить мой совет после Throwing Spring AOP для стрельбы, я сделал сокращение точки как можно более общим, и оно по-прежнему не срабатывает

Я надеюсь, что это просто плохая точка, но я не понимаю, почемуЯ был бы признателен, если бы кто-нибудь мог понять, почему

Советы

// Общие исключения

  @AfterThrowing(value = "execution(* *(..)) throws Exception", throwing = "exception")
    public void loggingGenericException(JoinPoint joinPoint, Exception exception) {
        String classMethod = this.getClassMethod(joinPoint);

        String stackTrace = "";
        for (StackTraceElement element : exception.getStackTrace()) {
            stackTrace += element.toString() + "\n";
        }

        String exceptionMessageAndStackTrace = exception.getMessage() + "\n" + stackTrace;

        if (exception instanceof EmptyResultSetException) {
            this.infoLevelLogging(joinPoint, classMethod);
        } else {

            this.errorLevelLogging(joinPoint, classMethod, exceptionMessageAndStackTrace);
        }
    }

Метод, который следует рекомендовать

public void getStudentTranscript(String studentId) throws RestClientException,IllegalArgumentException{


        if (!this.serviceUrl.isEmpty()) {

            if(studentId.isEmpty())
            {
                throw new IllegalArgumentException("studentId empty");
            }

            this.transcript =  (Transcript) super.getForObject(this.serviceUrl,Transcript.class, studentId);




         } else {

             throw new IllegalArgumentException("url is empty");
         }

}

Если я запускаю тест, чтобы проверить, что он применен, он не работает, тест выглядит следующим образом

@Test
public void  testLoggingFiredOnExceptionInTranscriptRepository() throws Exception
{
    Log log;
    log = mock(Log.class);
    when(log.isErrorEnabled()).thenReturn(true);

    try {
        loggingAspects.setLogger(log);
        transcriptRepository.setServiceUrl("");
        transcriptRepository.getStudentTranscript("12345");
    } catch (RuntimeException e) {
        System.out.println("e = " + e);
        verify(log, times(1)).isErrorEnabled();
        verify(log, times(1)).error(anyString());

    }
}

Система показывает исключение, сгенерированное

Может ли кто-нибудь предложить какой-либо совет (каламбур предназначен): -)

1 Ответ

0 голосов
/ 26 марта 2012

Вы поместили элемент <aop:aspectj-autoproxy /> в файл конфигурации Spring?В противном случае аннотации AOP не будут интерпретироваться.

К вашему сведению, после прочтения вашего вопроса я самостоятельно создал образец проекта, и аннотация @AfterThrowing просто работает как надо.

...