SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起

本篇为SpringMVC学习的第一篇,主要分析SpringMVC初始化的过程。

在分析SpringMVC初始化过程之前先复习下Servlet的生命周期,也就是Servlet从创建到销毁的整个过程。

      实例化->初始化->使用->销毁

     实例化:容器调用Servlet的构造器,创建一个Servlet对象;

     初始化:实例化之后,容器会立即调用对象的init方法;

     使用:调用servlet的service()方法处理客户端请求;

     销毁:调用servelet的destroy()方法销毁。

1.使用SpringMVC框架,我们需要在web.xml中配置spring框架的DispatcherServlet如下


    springmvc
    org.springframework.web.servlet.DispatcherServlet
   
      contextConfigLocation
      /WEB-INF/springmvc-servlet.xml

   

    1
 
 
    springmvc
    *.do

 

org.springframework.web.servlet.DispatcherServlet作为请求的入口,其初始化过程是怎么样的呢?我们看源码逐步剖析

2.DispatcherServlet的init()

 首先看DispatcherServlet类与相关类的关系图,主要列出了spring框架自建的类,HttpServletBean继承自HttpServlet类并覆盖了init方法。下图只是列出了现在由此我们逐步分析DispatcherServlet的初始化。

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第1张图片

由上类图关系我们可以看出,DispatcherServlet的初始化由HttpServletBean的init()方法开始。现在我们开始分析HttpServletBean的init()方法:

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第2张图片

由init方法的代码中可以看到initServletBean()方法,该方法上注释Let subclasses do whatever initialization they like.翻译为中文就是让子类做任何它们想做的初始化工作。HttpServletBean中该方法为空实现。代码如下

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第3张图片

方法的注释大致意思:子类为了实现个性化初始化可能需要重写这方法。这个servlet的所有属性将会在这个方法执行之前已经设置。这个默认实现是空的。

接下来我们看FrameworkServlet的initServletBean()。

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第4张图片

FrameworkServlet的initServletBean()中调用了initWebApplicationContext()方法,该方法代码如下:

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第5张图片

此方法是初始化和发布servlet的上下文,然后是调用onRefresh(wac)强制refresh上下文。onRefresh()方法如下

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第6张图片

接着我们需要去DispatcherServlet看看onRefresh()方法,

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第7张图片

接着我们去看initStrategies(context);

SpringMVC 学习之一 DispatcherServlet初始化方法initStrategies(context)从何而起_第8张图片

这里是DispatcherServlet的个性化初始化方法,该方法调用了DispatcherServlet内部的9个初始化方法,分别初始化不同的组件。

 

你可能感兴趣的:(springmvc,Java,spring)