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

8 篇文章 1 订阅
7 篇文章 0 订阅

本篇为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个初始化方法,分别初始化不同的组件。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值