【发布时间】:2017-05-16 11:38:48
【问题描述】:
我正在使用 Spring Boot 并尝试记录每个请求的响应时间。 为此,我正在尝试@Around Aspect。 代码:
@Aspect
@Component
public class XYZ {
@Around("execution(* org.springframework.web.servlet.DispatcherServlet.service(..))")
public void doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
// start stopwatch
long startTime = System.currentTimeMillis();
System.out.println("Before");
pjp.proceed();
long endTime = System.currentTimeMillis();
// stop stopwatch
System.out.println("Me here");
}
}
代码被编译,但问题是当我执行任何控制器方法时,什么都没有发生。我的意思是我的 SOP 应该被打印出来,但事实并非如此。 我错过了什么?
【问题讨论】:
-
您的端点在控制器中是如何配置的?你使用@RequestMapping 吗?
-
是的,当我将 @Around 指向我的控制器时,同样的代码也在工作,似乎我无法劫持对 Dispatcher servlet 的请求?
-
什么都没有发生,因为你告诉它什么也不做。您的方面基本上是在破坏调用链。无论实际调用做了什么,您总是返回 void。
@Around方面应始终将调用结果返回给proceed(),因此应返回Object而不是void。此外,当您使用 Spring Boot 时,只需放弃方面并包含spring-boot-starter-actuator,它已经为您提供了这些指标(以及更多)。
标签: spring-boot aspectj