一SpringMVC源码之DispatcherServletAbstractHanderMapping

黄沙百战穿金甲,不破楼兰终不还。这篇文章主要讲述一SpringMVC源码之DispatcherServletAbstractHanderMapping相关的知识,希望能为你提供帮助。
一:DipatcherServlet的初始化过程:【一SpringMVC源码之DispatcherServletAbstractHanderMapping】  我们可以先看一下dispatcherServlet的继承关系:
             

一SpringMVC源码之DispatcherServletAbstractHanderMapping

文章图片

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

文章图片

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

文章图片

这个例子首先建立了一个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源码之DispatcherServletAbstractHanderMapping

文章图片


    推荐阅读