SpringMVC---拦截器源码学习
多个拦截器的执行流程: 1、applyPreHandle方法。按照配置的顺序执行拦截其中的preHandle方法,并记下最后放行的拦截器的索引。如果都放行则不执行applyPreHandle方法中对应拦截器的afterCompletion函数的方法;只要有一个拦截器不放行,按照之前记录的索引倒序执行applyPreHandle方法中对应拦截器的afterCompletion函数的方法,下面的所有步骤都不执行。 2、handle方法。执行目标方法。若目标方法没有发生异常,正常执行下面的方法;如果该方法发生异常,则在doDispatch方法里面会catch到并按照之前记录的索引倒序执行handle方法中对应拦截器的afterCompletion函数的方法,而且不会执行后面的方法(拦截器的postHandle方法和渲染页面方法)。 3、applyPostHandle方法。倒序执行拦截器的postHandle方法。 4、processDispatchResult方法。若目标方法没有发生异常,目标方法最后会按照之前记录的索引倒序执行processDispatchResult方法中拦截器的afterCompletion函数的方法;如果该方法发生异常,则在doDispatch方法里面会catch到并按照之前记录的索引倒序执行拦截器的afterCompletion方法。 接受源码的制裁吧