创建一个拦截器,拦截所有请求,统计每个方法执行的时间,用继承HandlerInterceptor的方法来
时间: 2024-03-05 16:51:03 浏览: 71
好的,您可以继承HandlerInterceptor接口来实现拦截器,并在其中添加计时逻辑来统计每个方法的执行时间。
首先,您需要创建一个类,并继承HandlerInterceptor接口。然后,您可以在该类中实现preHandle和afterCompletion方法,并在其中添加计时逻辑。
示例代码如下:
```java
public class MethodExecutionTimeInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(MethodExecutionTimeInterceptor.class);
private ThreadLocal<Long> startTime = new ThreadLocal<>();
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("Method {} execution started.", handler.toString());
startTime.set(System.currentTimeMillis());
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
long elapsedTime = System.currentTimeMillis() - startTime.get();
logger.info("Method {} execution time: {} ms.", handler.toString(), elapsedTime);
}
}
```
在上面的代码中,我们实现了HandlerInterceptor接口,并在preHandle方法中记录了方法执行的开始时间,并在afterCompletion方法中计算了方法执行时间,并将其输出到日志中。
最后,您需要将拦截器配置到应用程序的配置文件中,以便Spring框架能够使用它来拦截所有的请求。示例代码如下:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private MethodExecutionTimeInterceptor methodExecutionTimeInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(methodExecutionTimeInterceptor);
}
}
```
在上面的代码中,我们创建了一个WebMvcConfig类,并实现了WebMvcConfigurer接口。在addInterceptors方法中,我们将我们的拦截器MethodExecutionTimeInterceptor添加到了InterceptorRegistry中,这样所有的请求都将被该拦截器拦截,并统计它们的执行时间。
希望这可以帮助您完成您的需求。
阅读全文