AfterThrowing建议不工作Spring AOP

时间:2012-03-15 11:45:26

标签: spring aop

我无法得到我的追求春天的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 :(得分:0)

您是否在{spring}配置文件中放置了<aop:aspectj-autoproxy />元素?否则,将不会解释AOP注释。

仅供参考,在阅读完您的问题后,我自己创建了一个示例项目,@AfterThrowing注释正常工作。