首先,Spring上下文分为父Spring上下文和子Spring上下文。
**子Spring就是SpringMVC的WebApplicationContext,同理服上下文就是spring框架本事的上下文Root上下文**
** 父Spring的监听器是ContextLoaderListener这个Listener,SpringMVC的入口就在DispatcherServlet。**
ContextLoaderListener父类方法
**ContextLoader#initWebApplicationContext()** **ContextLoader#configureAndRefreshWebApplicationContext()** **AbstractApplicationContext#refresh()**
首先解读ApplicationContext中的refresh()方法。
1.1 prepareRefresh() 方法
设置容器的一些状态:设置容器处于未关闭状态,设置active为激活状态,注入环境
1.2 AbstractApplicationContext#obtainFreshBeanFactory() 方法(xml解析bean标签)
调用到AbstractRefreshableApplicationContext#obtainFreshBeanFactory()方法
调用到AbstractRefreshableApplicationContext#refreshBeanFactory()方法
调用到AbstractXmlApplicationContext#loadBeanDefinitions()方法
调用到XmlBeanDefinitionReader#loadBeanDefinitions()方法
在loadBeanDefinitions方法中获取spring的配置文件流
然后调用到XmlBeanDefinitionReader#doLoadBeanDefinitions()
把xml转换成Document对象
调用到XmlBeanDefinitionReader#registerBeanDefinitions()方法
调用到DefaultBeanDefinitionDocumentReader#parseBeanDefinitions()方法
**此方法中有一个对子元素的for循环会调到此类中的#parseDefaultElement()方法 **
** 如果nodename 等于 bean 的话 也就是bean 的解析,对应着processBeanDefinition()方法,会在此进行解析下面会跟到BeanDefinitionParserDelegate#parseBeanDefinitionElement();**
** 重点解释parseBeanDefinitionElement()方法(开头用@表示,&#