一 SpringMVC源码之DispatcherServlet AbstractHanderMapping

Posted kingli1024

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一 SpringMVC源码之DispatcherServlet AbstractHanderMapping相关的知识,希望对你有一定的参考价值。

一:DipatcherServlet的初始化过程:

 我们可以先看一下dispatcherServlet的继承关系:

            技术分享图片

dispatcherServlet的初始化是从HttpServletBean中的init()方法开始,此方法是一个final类型的方法

 技术分享图片

        可以看到,在HttpServletBean的init中,首先将Servlet中配置的参数使用BeanWrapper设置到DispatcherServlet的相关属性,然后调用模板方法initServletBean,子类就通过这个方法初始化。代码中,我们可能会有疑惑:BeanWrapper是干什么用的,其实BeanWrapper是Spring提供地一个用来操作JavaBean属性的工具,可以使用它来修改一个对象的属性。

 技术分享图片

这个例子首先建立了一个User对象,再使用PropertyAccessorFactory封装成Bean-Wrapper对象,这样就可以使用BeanWrapper对象对其属性userName进行操作。

<servlet>
  <servlet-name>dispatcher</servlet-name>  
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  <load-on-startup>1</load-on-startup>  
  <init-param>
    <param-name>contextConfigLocation</param-name>  
    <param-value>classpath:springConfig/dispatcher-servlet.xml</param-value>  
  </init-param>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>  
  <url-pattern>/</url-pattern>  
</servlet-mapping>

比如说上面这段web.xml中的代码,其中的contextConfigLocation属性,这个属性在FrameworkServlet中定义,但在httpServletBean中没有定义。此时BeanWrapper就派上用场了,构造BeanWrapper对象,利用Spring注入的特性,调用setPropertyValues方法就可将contextConfigLocation属性设置到对应实例中。(contextConfigLocation属性可以用于构造SpringMVC的上下文)

下面来说说FrameworkServlet类,此类实现了initServletBean()方法技术分享图片

以上是关于一 SpringMVC源码之DispatcherServlet AbstractHanderMapping的主要内容,如果未能解决你的问题,请参考以下文章

Envoy源码分析之Dispatcher

Struts2 源码分析——调结者(Dispatcher)之action请求

Struts2 源码分析——调结者(Dispatcher)之action请求

Struts2 源码分析——调结者(Dispatcher)之执行action

面试官:你分析过SpringMVC的源码吗?

SpringMVC关于jsonxml自动转换的原理研究[附带源码分析]