一 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()方法

猜你喜欢

转载自www.cnblogs.com/KingLi1024/p/9211489.html