代码改变世界

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的结构如下: