Interceptor执行流程详解

全面解析Interceptor拦截器        以翻阅源码的形式带领你们解析

执行流程图 拦截器全部返回true : 

执行流程图 拦截器返回false : 

入口点 还是我们熟知的前端控制器DispatchServlet,找里面的doDispatch方法

 记住 翻阅源码一定不要从头开始看 人会傻的 , 我把重点以断点的形式标出来了:

简介

我们都知道 在Spring的环境中 我们要实现拦截器Interceptor可以通过配置类的方式或者xml文件区配置MVC:interceptor ,并且自定义类需要实现HanblerInterceptor接口并重写里面的三个方法
断点1 :   点进去看内部方法 其内部就是调用了perHandle

mappedHanbler是HandlerExecutionChain类型的 可以在源码第一张图看到哟(断点下方定义的)

可以发现该HandlerExecutionChain类中内部维护了一个Object类型的 handler 跟一个集合

不妨直接告诉大家 handler就是目标方法 也就是处理器方法

维护的这么一个集合 就是 对应的interceptor拦截器 因为拦截器可以有多个所有使用的集合

在回到方法内部 发现内部去拦截器集合进行一个遍历,每一个拦截器对象都调用preHanble方法 , 发现false就停止遍历 , 是不是就对应了上面执行流程图的第一行perHanble执行流程 一旦拦截器返回false ,目标方法不会执行 , 对应的postHanble也不会执行,直接执行对应返回true的拦截器中的afterCompletion方法。

断点二: 其实内部就是调用了目标方法,这里也就不过多bb了。

断点三: 则是在preHandle目标方法完且通过时,执行, 来到方法内部可以看见:


 是对我们的拦截器集合进行了一个倒序遍历 在依次执行postHandle方法 , 这也就应验了 流程图中postHandle是从右往左执行。

在看第四个断点 : 找到方法内部的断点这一行,

进入方法内部在看,发现又是一个倒序遍历拦截器,也就可以应验afterCompertion方法也是倒着执行的了

温馨提示 : 

       目标方法 = 处理器方法 也就是我们Controller层中的某一个方法

再次提醒, 翻阅源码一定一定不能从头开始看 就看自己见过的,自己懂的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值