XmlBeanDefinitionReader 类中的doLoadBeanDefinition()方法是从特定XML 文件中实际载入Bean 配置资源的方法,该方法在载入Bean 配置资源之后将其转换为Document 对象,接下来调用registerBeanDefinitions() 启动Spring IOC 容器对Bean 定义的解析过程,
registerBeanDefinitions()方法源码如下:

//按照Spring的Bean语义要求将Bean定义资源解析并转换为容器内部数据结构
public int registerBeanDefinitions(Document doc, Resource resource) throws BeanDefinitionStoreException {//得到BeanDefinitionDocumentReader来对xml格式的BeanDefinition解析BeanDefinitionDocumentReader documentReader = createBeanDefinitionDocumentReader();//获得容器中注册的Bean数量int countBefore = getRegistry().getBeanDefinitionCount();//解析过程入口,这里使用了委派模式,BeanDefinitionDocumentReader只是个接口,//具体的解析实现过程有实现类DefaultBeanDefinitionDocumentReader完成documentReader.registerBeanDefinitions(doc, createReaderContext(resource));//统计解析的Bean数量return getRegistry().getBeanDefinitionCount() - countBefore;
}

Bean 配置资源的载入解析分为以下两个过程:

首先,通过调用XML 解析器将Bean 配置信息转换得到Document 对象,但是这些Document 对象并没有按照Spring 的Bean 规则进行解析。这一步是载入的过程

其次,在完成通用的XML 解析之后,按照Spring Bean 的定义规则对Document 对象进行解析,其解析过程是在接口BeanDefinitionDocumentReader 的实现类DefaultBeanDefinitionDocumentReader 中实现。

基于Xml 的IOC 容器-分配解析策略相关推荐

  1. 基于Xml 的IOC 容器-分配注册策略

    让我们继续跟踪程序的执行顺序,接下来我们来分析DefaultBeanDefinitionDocumentReader 对Bean 定义转换的Document 对象解析的流程中, 在其parseDefa ...

  2. 基于Xml 的IOC 容器-分配路径处理策略

    在XmlBeanDefinitionReader 的抽象父类AbstractBeanDefinitionReader 中定义了载入过程. AbstractBeanDefinitionReader 的l ...

  3. 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  4. 从源码深处体验Spring核心技术--基于Xml的IOC容器的初始化

    IOC 容器的初始化包括 BeanDefinition 的 Resource 定位.加载和注册这三个基本的过程. 我们以ApplicationContext 为例讲解,ApplicationConte ...

  5. 基于Xml 的IOC 容器-将配置载入内存

    BeanDefinitionDocumentReader 接口通过registerBeanDefinitions() 方法调用其实现类DefaultBeanDefinitionDocumentRead ...

  6. 基于Xml 的IOC 容器-向容器注册

    DefaultListableBeanFactory 中使用一个HashMap 的集合对象存放IOC 容器中注册解析的BeanDefinition,向IOC 容器注册的主要源码如下: //存储注册信息 ...

  7. 基于Xml 的IOC 容器-载入<list>的子元素

    在BeanDefinitionParserDelegate 类中的parseListElement()方法就是具体实现解析<property>元素中的<list>集合子元素,源 ...

  8. 基于Xml 的IOC 容器-载入<bean>元素

    Bean 配置信息中的<import>和<alias>元素解析在DefaultBeanDefinitionDocumentReader 中已经完成,对Bean 配置信息中使用最 ...

  9. 基于Xml 的IOC 容器-准备文档对象

    DocumentLoader 将Bean 配置资源转换成Document 对象的源码如下: //使用标准的JAXP将载入的Bean定义资源转换成document对象 @Override public ...

最新文章

  1. .net mvc mssql easyui treegrid
  2. Android源码分析(三):Mms模块总结(一)
  3. matlab泰勒图,matlab画泰勒图
  4. 栈应用之 括号匹配问题(Python 版)
  5. c++求平均值_云顶之弈S4:六射手娱乐吃鸡!人均刮痧王,每个人都是主C
  6. @Cacheable原理
  7. Apache FTPClient操作文件上传下载及公共类
  8. Unity预计算全局实时GI(gi params)
  9. oldboy_09_03day
  10. 动态改变eachers图表高_让你的Excel图表动起来
  11. git 配置origin_GitHub/Git配置与简单的使用
  12. 卡尔曼滤波—建立状态空间表达式
  13. 简单的MySql游标创建
  14. vue父组件变量传递子组件_Vue2.x中的父组件数据传递至子组件
  15. AI 科研入坑指南—中国人民大学赵鑫
  16. 排查黑苹果系统RTL 8125B 2.5G网卡驱动故障
  17. 2018-ECCV-Beyond Part Models:Person Retrieval with Refined Part Pooling论文笔记
  18. Python实现黑白棋人机对弈
  19. 电梯、签到、黑板测试用例
  20. ICASSP 2019----Deep Speaker Representation Using Orthogonal Decomposition and Recombination for Spea

热门文章

  1. HTML 中的字符实体集
  2. 创建一个dynamics CRM workflow (二) - Build in Workflows
  3. 解决子线程操作UI的方法
  4. docker - 启动container时出现 [warning] : ipv4 forwarding is disabled. networking will not work
  5. HDU 4869 Turn the pokers(思维+组合公式+快速幂)
  6. for遍历和foreach遍历的一个细小差别
  7. 指针A - 签到题(顺序三元组)
  8. How to sign app
  9. Android使用腾讯浏览服务X5内核
  10. Splay(区间翻转) 模板