Spring IOC初始化过程

版权声明:本文为博主原创文章,转载请注明出处http://blog.csdn.net/u010796790 https://blog.csdn.net/u010796790/article/details/52623328

Spring IOC初始化过程——源码解读

Spring IOC的核心是BeanFactory

其实SpringIOC初始化的过程就是准备好BeanFactory的过程。

(1)定位并获取资源文件

ClassPathResource res = new ClassPathResource("my/applicationContext.xml");

因为对象和对象之间的关系存储在xmlproperties等语义化配置文件中,首先要定位到配置文件。用资源加载器ResourceLoader将资源文件路径转换为对应的Resource

(2)解析资源文件

XmlBeanFactory bf = new XmlBeanFactory(res);

步骤:

1.构造BeanFactory时,首先调用的是BeanDefinitionReader类型的reader属性的loadBeanDefinitions()方法,是整个资源加载的切入点。

  • 封装资源文件:当进入BeanDefinitionReader后首先对参数Resource进行EncodedResource类进行封装
  • 获取输入流:从Resource中获取InputStream并构造InputSource
  • 通过构造器的InputSource实例和Resource实例继续调用loadBeanDefinitions.

2.loadBeanDefinition调用doLoadBeanDefinitons方法,完成以下三个方法

  • XML文档的验证模式
  • DocumentLoader处理资源文件,生成Document
  • 根据返回的Document信息注册bean信息
首先调用BeanDefinitonDocumentReaderdoRegisterBeanDefinitions去注册bean定义信息
 通过实现接口BeanDefinitionDocumentReaderDefaultBeanDefinitionDocumentReader类的parseBeanDefinitions来解析Document,从xml文档根节点递归循环处理各个节点,实际上使用BeanDefinitionParserDelegateparseBeanDefinitionElement方法将bean节点转换为BeanDefinitionHolder对象,完成最终的解析

(3)注册

DefaultListableBeanDefiniton.registerBeanDefiniton利用解析好的BeanDefinition对象完成最终的注册。将beanNameBeanDefinition作为键值放到了beanFactorymap

Spring核心类BeanFactory,框架图


阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页