首先 我们想使用拦截器 要在application.xml中进行如下配置:
这里这个MyInterceptor是我们自己写的拦截器,如下
功能如上图 我们接下来分析一下源码,详述一下 拦截器中每个方法的作用
preHandle方法
如上面两张图所示,就找到了我们自定义拦截器中的preHandler方法
如果我们自己写的preHandle方法返回结果为false,则doDispatch方法中红框内的条件判断为true,则return跳过doDispatch方法,不再执行,所以这个preHandle方法通常用来做设置权限
postHandle方法
如上图,若果applyPreHandle判断为false
则先执行handle方法,然后将返回的视图,传入我们的applyPostHandle方法中 ,遍历出我们的拦截器,然后调用我们拦截器中的postHandle方法
因为此时请求发出,执行完Controller层方法之后还没有响应在页面上,所以此时我们可以通过这个postHandle方法对mv视图进行一下处理再响应至显示页面上
afterCompletion方法
通常可以用作释放资源
一、是在请求转发完成之后
二、是doDispatch方法中(实际上是processDispatchResult方法中)出现异常时
两种情况都调用了HandlerExecutionChain中的triggerAfterComletion方法