如何初始化springmvc容器
2016-04-11 · 知道合伙人数码行家
知道合伙人数码行家
向TA提问 私信TA
初始化的大体流程:
然后,我们再来看一下,我们的控制器DispatcherServlet的类图及继承关系。
首先web.xml中定义了servlet,load-on-startup=1:
服务器启动的时候对该servlet进行初始化,调用HttpServletBean的init方法:
该方法里又会调用initSertlvetBean进行初始化。
initSertlvetBean这个方法是在FrameWorkServlet中定义的:
initWebApplicationContext是对Spring mvc容器的初始化。
而initFrameworkServlet();方法的实现是空的,可以由子类重写。
现在我们继续initWebApplicationContext():
WebApplicationContext parent =
WebApplicationContextUtils.getWebApplicationContext(getServletContext());
这个步骤是得到的父context,也就是root context。
CreateWebApplicationContext(parent)是初始化Spring mvc的过程:
这个过程会生成一个 XmlWebApplicationContext 的实例,也就是Spring MVC的容器。
并通过下面的方法,设置父context,设置ServletContext等等信息。
Refresh方法会重启context,并初始化bean:
这个过程就是初始化bean的过程,我们可以简略的看一下,
得到并配置了BeanFactory.
注册了MessageSource。
注册了监听类ApplicationEventMulticaster
实例化所有的单例bean:finishBeanFactoryInitialization(beanFactory);
重点在于最后一步,finishRefresh();这一步会触发一个ApplicationEvent:
,进入 AbstractApplicationContext中的
Java代码
protected void finishRefresh() {
publishEvent(new ContextRefreshedEvent(this));
}
其中this是指XmlWebApplicationContext对象。