Spring-aop @Around 没有按预期工作
Sprinng-aop @Around is not working as expected
我写了一个简单的 AOP 来记录请求和执行时间。
一切正常,但在使用注释记录执行时间时,它不会重新调整任何响应,尽管 http 状态代码为 200。
你能告诉我问题是什么吗?
控制器:
@LogExecutionTime
@GetMapping("/test")
public String index(){
return "Hello";
}
看点:
@Around("@annotation(LogExecutionTime)")
public void logTime(ProceedingJoinPoint jp) throws Throwable{
watch.start() // common lang stopwatch
jp.proceed();
watch.stop();
log,info("Execution time " +watch);
}
在日志中我可以看到它显示了执行时间但是在邮递员中我没有得到响应“你好”
如果我评论 @LogExecutionTime 注释它工作正常
“周围”类型的方面具有修改 return 值的能力。 proceed
方法 return 是原始方法的值,您默默地忽略了它,并选择不 return 任何东西(我相信这会将调用默认为 return无效)。您需要修改您的方法如下:
@Around("@annotation(LogExecutionTime)")
public Object logTime(ProceedingJoinPoint jp) throws Throwable{
watch.start(); // common lang stopwatch
Object returnValue = jp.proceed();
watch.stop();
log.info("Execution time " +watch);
return returnValue;
}
您可能还想将 watch.stop()
调用放在 finally
块中,以防观察到的方法抛出异常。
我写了一个简单的 AOP 来记录请求和执行时间。 一切正常,但在使用注释记录执行时间时,它不会重新调整任何响应,尽管 http 状态代码为 200。
你能告诉我问题是什么吗?
控制器:
@LogExecutionTime
@GetMapping("/test")
public String index(){
return "Hello";
}
看点:
@Around("@annotation(LogExecutionTime)")
public void logTime(ProceedingJoinPoint jp) throws Throwable{
watch.start() // common lang stopwatch
jp.proceed();
watch.stop();
log,info("Execution time " +watch);
}
在日志中我可以看到它显示了执行时间但是在邮递员中我没有得到响应“你好” 如果我评论 @LogExecutionTime 注释它工作正常
“周围”类型的方面具有修改 return 值的能力。 proceed
方法 return 是原始方法的值,您默默地忽略了它,并选择不 return 任何东西(我相信这会将调用默认为 return无效)。您需要修改您的方法如下:
@Around("@annotation(LogExecutionTime)")
public Object logTime(ProceedingJoinPoint jp) throws Throwable{
watch.start(); // common lang stopwatch
Object returnValue = jp.proceed();
watch.stop();
log.info("Execution time " +watch);
return returnValue;
}
您可能还想将 watch.stop()
调用放在 finally
块中,以防观察到的方法抛出异常。