在平凡的生活中,不如抽出时间积以跬步,然后走得更远!
前言
今天接着昨天的内容,继续研究springmvc的各个组件、当明白了这些组件的作用后,串起来也就搞懂了springmvc。
一、HandlerMapping
作用:根据请求的信息(如 url、method、header 等)查找请求处理器,即找到自定义的 controller 中处理请求的方法。
二、HandlerExecutionChain
相信很多同学和我一样,看到这个组件,好像没见过。
大家应该知道在springmvc的处理流程中DS(dispatcherservlet)会首先找到handlerMapping。
public interface HandlerMapping {
default boolean usesPathPatterns() {
return false;
}
@Nullable
HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;
}
HandlerMapping接口的第二个方法返回的正式我们要研究的这个组件HandlerExecutionChain。
什么是HandlerExecutionChain,看到Chain同学们应该立即想到了一种设计模式,没错,责任链模式。过滤器可以添加多个,正是添加到了这个组件中,然后该组件维护了一条责任链,既然是责任链一定有顺序。
上篇我们讲到过滤器中三个方法preHandle、postHandle、afterCompletion分别是正序、倒序、倒序执行的、这种执行顺序就体现在HandlerExecutionChain中!
当preHandle方法返回false(被拦截后)会去执行afterCompletion方法。
二、执行顺序
T1是T2父类
以上是创建两次T2对象的执行顺序
静态代码块>非静态代码块>构造方法