[TOC]
从web.xml配置的监视器中启动
1 2 3
| <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
|
ContextLoaderListener
实现了ServletContextListener
接口,tomcat启动时就会调用ContextLoaderListener
的contextInitialized()
方法,完成以下事件:
- 判断是否重复注册了WebApplicationContext。
- 获取各种配置文件(如web.xml中的
contextConfigLocation
的属性值),将其注册到XmlWebApplicationContext
- 最后调用
wac.refresh();
wac.refresh()
是IOC加载最核心的部分,完成了资源文件的加载、配置文件解析、Bean定义的注册、组件的初始化等核心工作。
AbstractApplicationContext的refresh()源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { prepareRefresh(); ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); prepareBeanFactory(beanFactory); try { postProcessBeanFactory(beanFactory); invokeBeanFactoryPostProcessors(beanFactory); registerBeanPostProcessors(beanFactory); initMessageSource(); initApplicationEventMulticaster(); onRefresh(); registerListeners(); finishBeanFactoryInitialization(beanFactory); finishRefresh(); }catch (BeansException ex) { destroyBeans(); cancelRefresh(ex); throw ex; } }
|
看看Spring的源码(一)——Bean加载过程