SpringBoot 拦截器的执行时间和原理

1,306 阅读1分钟

1.先根据当前请求,找到HandlerExecutionChain - [可以处理请求的handler以及handler的所以拦截器]

image.png

查看源码

DispatcherServlet

image.png

HandlerExecutionChain中的applyPreHandle方法

image.png

HandlerExecutionChain中的triggerAfterCompletion

image.png

2.先来顺序执行所以拦截器中的preHandle方法

  • 如果当前拦截器prehandler返回为true。则执行下一个拦截器的preHandle
  • 如果当前拦截器prehandler返回为false。直接 倒序执行所有已经执行了的拦截器的 afterCompletion

3.如果任何一个拦截器返回false。直接跳出不执行目标方法

image.png

4.所有拦截器都返回True。执行目标方法

image.png

5.倒序执行所有拦截器的postHandle方法。

image.png

6.前面的步骤有任何异常都会直接倒序触发 afterCompletion

image.png

7.页面成功渲染完成以后,也会倒序触发 afterCompletion

image.png

image.png