SpringMVC拦截器执行顺序分析

        DispatcherServlet做为SpringMVC前置处理器,在doDispatch方法中定义了模块整体的核心流程,SpringMVC独有的拦截器的执行逻辑同样也定义在其中,关于SpringMVC的整体流程逻辑原理解析可参考文章:Spring MVC原理解析

        如下图所示,标注了拦截器执行的关键步骤:

       第一步:从处理器映射器中获取HandlerExecutionChian,该类包含一个处理器Handler和一个HandlerInterceptor列表;

       第二步:调用拦截器中preHandle方法,拦截器中定义了三个方法,这个方法返回的是boolean类型,其它两个方法返回的是void方法,这个方法返回的true或false会影响拦截器执行顺序,当返回true,会接着执行下一个拦截器的preHandle方法,如果放回false,则从上一个拦截器开始倒序执行拦截器的afterCompletion方法,最后整个doDispatcher执行就结束了;

       第三步:能到第三步的前提是,拦截器的preHandle方法都返回true,这种情况下,在第二步依次正序执行每个拦截器的preHandle方法后,然后在第三步依次倒序执行每个拦截器的postHandle方法,接着到第四步;

       第四步:依次倒序执行每个浏览器的afterCompletion方法,至此拦截器流程就执行完了。

       验证:定义两个拦截器Interceptor1和Interceptor2

        preHandle方法都返回true,执行结果如下:

 

 

        第二个拦截器preHandle方法返回false,执行结果如下:

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值