我无法得到我的追求春天的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());
}
}
系统输出显示异常触发
任何人都可以提供任何建议(双关语): - )
答案 0 :(得分:0)
您是否在{spring}配置文件中放置了<aop:aspectj-autoproxy />
元素?否则,将不会解释AOP注释。
仅供参考,在阅读完您的问题后,我自己创建了一个示例项目,@AfterThrowing
注释正常工作。