一、概述
拦截器的使用场景越来越多,尤其是面向切片编程流行之后。那通常拦截器可以做什么呢?
之前我们在Agent介绍中,提到过统计函数的调用耗时。这个思路其实和AOP的环绕增强如出一辙。
那一般来说,场景如下:
以及其他等等。
二、Spring的拦截器
无论是SpringMVC或者SpringBoot中,关于拦截器不得不提:
org.springframework.web.servlet.handler.HandlerInterceptorAdapter
public abstract class HandlerInterceptorAdapter implements AsyncHandlerInterceptor { // 在目标方法执行前执行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } // 在目标方法执行后执行,但在请求返回前,我们仍然可以对 ModelAndView进行修改 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {} // 在请求已经返回之后执行 @Override public void afterCompletion( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {} // 用来处理异步请求, 当Controller中有异步请求方法的时候会触发该方法 @Override public void afterConcurrentHandlingStarted( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {} }