创建一个拦截器,拦截所有请求,统计每个方法执行的时间
时间: 2024-03-05 15:50:40 浏览: 21
好的,这个问题可以通过在请求前后分别记录时间,然后将两个时间点之间的时间差计算出来即可实现。以下是示例代码:
```java
public class TimingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
long startTime = System.currentTimeMillis();
request.setAttribute("startTime", startTime);
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
long startTime = (long) request.getAttribute("startTime");
long endTime = System.currentTimeMillis();
long executeTime = endTime - startTime;
// 打印请求方法、请求路径、执行时间等信息
System.out.printf("%s %s 执行时间:%dms%n", request.getMethod(), request.getRequestURI(), executeTime);
}
}
```
在这个示例代码中,我们实现了一个 HandlerInterceptor 接口的实现类 TimingInterceptor,它会在每个请求处理前和处理后分别执行 preHandle 和 afterCompletion 方法。在 preHandle 方法中,我们记录了请求开始的时间,并将其保存在 HttpServletRequest 对象的一个属性中;在 afterCompletion 方法中,我们将这个属性取出来,并计算出请求的执行时间。最后,我们可以将请求方法、请求路径、执行时间等信息打印出来,或者将其记录到日志中。
需要注意的是,以上代码只是一个示例,具体的实现方式还需要根据具体的项目框架和业务需求进行调整。