SpringMVC DispatcherServlet 启动和加载过程(源码调试) (3)

自然,会调用到 DispatcherServlet 的 onRefresh() 方法上,而这个方法实际上调用了其它的一系列初始化方法,如 initHandlerMappings(context) & initHandlerAdapters(context),这样在容器启动的过程中,就已经初始化完成 HandlerMapping & HandlerAdapter

SpringMVC DispatcherServlet 启动和加载过程(源码调试)

至此,DispatcherServlet 中与 Servlet 生命周期相关的调用构造器及 init() 方法就已经基本完成了,接下来,就是对请求的响应啦,这会依次调用 Servlet 的 service() 方法,不属于本文范畴啦~~~

 

简单总结起来,Tomcat 容器启动并加载 DispatcherServlet 时所做的主要工作如下:

调用 DispatcherServlet 的构造器(当然也会调用父类的构造器,不过构造器默认实现为空;这个动作很短,基本上可以忽略)

调用 GenericServlet 的 init() 方法,不过,这被 HttpServletBean 重载了;同时,重载的 HttpServletBean  的 init() 方法调用了 initServletBean() 方法;而 initServletBean() 方法会完成以下操作:

初始化(创建)一个 WebApplicationContext(实际上是 WebApplicationContext 类)

调用 AbstractApplicationContext 的 refresh() 方法,完成 BeanFactory创建、读取 SpringMVC 配置文件内容、处理容器后处理器、初始化MessageResource、注册监听器等工作

通过上一步中读取到的内容,初始化 HandlerMapping & HandlerAdapter 等工作

==上面3个步骤才是重要内容==

总的来说,DispatcherServlet 还是一个 Servlet,遵循 constructor() --> init() --> service() --> destroy() 方法的调用流程。只不过,它的这个 init() 方法确实比较复杂(本文内容)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyxwj.html