SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起
本篇为SpringMVC学习的第一篇,主要分析SpringMVC初始化的过程。在分析SpringMVC初始化过程之前先复习下Servlet的生命周期,也就是Servlet从创建到销毁的整个过程。实例化->初始化->使用->销毁实例化:容器调用Servlet的构造器,创建一个Servlet对象;初始化:实例化之后,容器会立即调用对象的...
本篇为SpringMVC学习的第一篇,主要分析SpringMVC初始化的过程。
在分析SpringMVC初始化过程之前先复习下Servlet的生命周期,也就是Servlet从创建到销毁的整个过程。
实例化->初始化->使用->销毁
实例化:容器调用Servlet的构造器,创建一个Servlet对象;
初始化:实例化之后,容器会立即调用对象的init方法;
使用:调用servlet的service()方法处理客户端请求;
销毁:调用servelet的destroy()方法销毁。
1.使用SpringMVC框架,我们需要在web.xml中配置spring框架的DispatcherServlet如下
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
org.springframework.web.servlet.DispatcherServlet作为请求的入口,其初始化过程是怎么样的呢?我们看源码逐步剖析
2.DispatcherServlet的init()
首先看DispatcherServlet类与相关类的关系图,主要列出了spring框架自建的类,HttpServletBean继承自HttpServlet类并覆盖了init方法。下图只是列出了现在由此我们逐步分析DispatcherServlet的初始化。
由上类图关系我们可以看出,DispatcherServlet的初始化由HttpServletBean的init()方法开始。现在我们开始分析HttpServletBean的init()方法:
由init方法的代码中可以看到initServletBean()方法,该方法上注释Let subclasses do whatever initialization they like.翻译为中文就是让子类做任何它们想做的初始化工作。HttpServletBean中该方法为空实现。代码如下
方法的注释大致意思:子类为了实现个性化初始化可能需要重写这方法。这个servlet的所有属性将会在这个方法执行之前已经设置。这个默认实现是空的。
接下来我们看FrameworkServlet的initServletBean()。
FrameworkServlet的initServletBean()中调用了initWebApplicationContext()方法,该方法代码如下:
此方法是初始化和发布servlet的上下文,然后是调用onRefresh(wac)强制refresh上下文。onRefresh()方法如下
接着我们需要去DispatcherServlet看看onRefresh()方法,
接着我们去看initStrategies(context);
这里是DispatcherServlet的个性化初始化方法,该方法调用了DispatcherServlet内部的9个初始化方法,分别初始化不同的组件。
更多推荐
所有评论(0)