Spring
2012-12-13 13:07 ggzwtj 阅读(360) 评论(0) 编辑 收藏 举报FileSystemXmlApplicationContext创建的过程如下,感觉把这个过程读懂了就总体是大致了解的IOC是怎么设计的了:
FileSystemXmlApplicationContext容器的构造函数;
AbstractApplicationContext.refresh()。
1、AbstractApplicationContext.prepareRefresh()设置好active状态。
2、AbstractApplicationContext.obtainFreshBeanFactory取得一个新的BeanFactory。
1、AbstractRefreshableApplicationContext.refreshBeanFactory
1、如果当前的beanFactory不为空,将其设置为空
2、创建一个DefaultListableBeanFactory
3、根据容器的属性设置beanFactory的属性
XmlWebApplicationContext.loadBeanDefinitions
1、创建XmlBeanDefinitionReader
2、配置ResourceLoader和ResourceEntityResolver
3、XmlWebApplicationContext.loadBeanDefinitions
1、取到configLocations
2、遍历configLocations
AbstracBeanDefinitionReader.loadBeanDefinitions
1、获取ResourceLoader
2、通过ResourceLoader获取Resource
3、XmlBeanDefinitionReader.loadBeanDefinitions从XML文件中加载
1、从ThreadLocal中取出currentResources
2、打开EncodeResource的InputStream,并创建InputSource
3、XmlBeanDefinitionReader.doLoadBeanDefinitions从XML中加载的实际操作
1、获取验证模式
2、DefaultDocumentLoader.loadDocument读取文档
1、创建DocumentBuilderFactory
2、创建DocumentBuilder
3、DocumentBuilder.parse来对文件进行分析并创建Document,然后返回
4、registerBeanDefinitions根据文档读取BeanDefinition
4、将这个beanFactory设置给容器
XmlBeanDefinitionReader的结构如下: