DispatcherServlet的初始化过程
Spring MVC源码的核心就是DispatcherServlet前端控制器,从客户端传过来的所有请求都需要通过DispatcherServlet来进行分发、处理,然后把响应结果返回给客户端。DispatcherServlet的本质就是一个Servlet,和Servlet有着同样的生命周期,初始化->运行->销毁,接下来我看看DispatcherServlet的初始化过程是什么样子的。
- DispatcherServlet的继承关系
DispatcherServlet的初始化过程图
**DispatcherServlet
的初始化工作并没有在DispatcherServlet
这个类里面进行初始化,而是在HttpServletBean
这个类里面重写了init()
方法。下面是HttpServletBean#init()**方法
public final void init() throws ServletException {
if (logger.isDebugEnabled()) {
logger.debug("Initializing servlet '" + getServletName() + "'");
}
/**
*加载web.xml中的init-param进行初始化参数
*ServletConfigPropertyValues是HttpServletBean的一个内部类,
*用于解析web.xml定义中<servlet>元素的子元素<init-param>中的参数值
*/
// Set bean properties from init parameters.
PropertyValues pvs = new ServletConfigPropertyValues(getServletConfig(), this.requiredProperties);
if (!pvs.isEmpty()) {
try {
//将Servlet转化成BeanWrapper,便于值的注入
BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(this);
ResourceLoader resourceLoader = new ServletContextResourceLoader(getServletContext());
bw.registerCustomEditor(Resource.class, new ResourceEditor(resourceLoader, getEnvironment()));
//模板方法
initBeanWrapper(bw);
//把初始配置设置给DispatcherServlet
bw.setPropertyValues(pvs