首先搞清楚,Spring的启动过程说的其实也就是Spring容器的启动过程,这是一回事。
spring的启动是建筑在servlet容器之上的,所有web工程的初始位置就是web.xml,它配置了servlet的上下文(context)和监听器(Listener),下面就来看看web.xml里面的配置:
接下来就一点的来解析这样一个启动过程。
从spring的上下文监听器开始:
1、通过上述的第一段配置是初始化上下文,然后通过后一段的来加载配置文件,其中调用的spring包中的ContextLoaderListener这个上下文监听器,ContextLoaderListener是一个实现了ServletContextListener接口的监听器,他的父类是ContextLoader,在启动项目时会触发contextInitialized上下文初始化方法。下面我们来看看这个方法:
publicvoidcontextInitialized(ServletContextEvent event) { initWebApplicationContext(event.getServletContext()); }
可以看到,这里是调用了父类ContextLoader的initWebApplicationContext(event.getServletContext());方法,很显然,这是对ApplicationContext的初始化方法,也就是到这里 进入了springIoC的初始化。
2、接下来再来看看initWebApplicationContext又做了什么工作,先看看代码
if (servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE) !=null) {thrownew IllegalStateException("Cannot initialize context because there is already a root application context present - " +"check whether you have multiple ContextLoader* defini