1 介绍

创建并初始化spring容器中,关键一步就是读取并解析spring XML配置文件。这个过程比较复杂,本文将详细分析整个流程。先看涉及到的关键类。

XmlWebApplicationContext:web应用的默认Spring容器

XmlBeanDefinitionReader:读取XML并解析xml文件

DocumentLoader:文件先被读取为了原始的输入流InputStream,然后封装为InputSource。DocumentLoader加载inputSource,解析后得到Document对象

Document:代表一个XML或者HTML标记文件,包含docType,各种element节点等。

BeanDefinition:XML中bean在spring容器中的表示。Document会被解析为BeanDefinition。在Bean创建和初始化中它们会大展拳脚。

BeanDefinitionDocumentReader:解析Document中的节点元素Element,转换为BeanDefinition,并注册他们到BeanDefinition注册表中。默认实现类为DefaultBeanDefinitionDocumentReader

BeanDefinitionParserDelegate:实际解析Document中的节点元素,采用了代理模式。

2 流程

2.1 obtainFreshBeanFactory

初始化spring容器中的refresh()方法中,会调用obtainFreshBeanFactory()方法,它是读取并解析spring xml配置文件的入口。详细过程可以参看上一篇文章。下面从这个方

Spring源码分析3 — spring XML配置文件的解析流程相关推荐

  1. spring源码分析第六天------spring经典面试问题

    spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...

  2. Mybatis 源码分析(一)配置文件加载流程

    Mybatis 源码分析(一)配置文件加载流程 1.项目构建 引入依赖 <dependency><groupId>org.mybatis</groupId>< ...

  3. Spring源码分析4 — spring bean创建和初始化

    1 介绍 创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMultic ...

  4. uboot源码分析(1)uboot 命令解析流程简析

    uboot 命令解析流程简析 uboot正常启动后,会调用main_loop(void)函数,进入main_loop()之后,如果在规定的时间(CONFIG_BOOTDELAY)内,没有检查到任何按键 ...

  5. spring源码分析之spring注解@Aspect是如何工作的?

    AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程. AOP ...

  6. spring源码分析之spring jmx

    JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...

  7. Spring源码分析(三)

    Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...

  8. Spring 源码分析衍生篇十 :Last-Modified 缓存机制

    文章目录 一.前言 二.Last-Modify 三.实现方案 1. 实现 org.springframework.web.servlet.mvc.LastModified接口 1.1. 简单演示 1. ...

  9. spring 源码分析(1)-xml文件解析

    我们在最开始接触spring的时候,看到不少书spring入门的例子如下 ApplicationContext atx = new ClassPathXmlApplicationContext(&qu ...

最新文章

  1. 技术要求→物理安全→防盗窃和防破坏
  2. 机器人图规划算法研究现状简述
  3. 为什么python不能输入中文_一条命令解决mac版本python IDLE不能输入中文问题
  4. golden gate 加initial load 在rac 上的配置
  5. unity3d 常用代码
  6. Nero刻录软件超级实用技巧大搜罗
  7. 2021年总结:回顾这不平凡的一年
  8. 员工不明白面试流程,傻傻等了三个月,收到面试评价短信蒙了
  9. 产品有感之拼多多——社交更优惠的电商平台
  10. 分布式环境下对部分热数据(如redis热key,热请求)进行探测,并对探测结果及时同步到各个client实例的JVM内存的方案简述
  11. 苹果cmsV10MXone Pro自适应模板 站长亲测 全网首发
  12. NuxtJS 项目部署如何部署到nginx
  13. c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据
  14. bzoj3694:最短路(最短路树+并查集)
  15. 6 生僻字_戓、弚、圡什么鬼?这些生僻字逼死强迫症!
  16. JavaWeb(华清远见)
  17. Java 获取当前时间的前几分钟的时间点的方法
  18. 分享一个运维同学常用的站点监测和测速网站17ce.com, 备用
  19. 倒计时3天丨2023云和恩墨生态产品发布会即将开启,三大新品蓄势待发
  20. Wi-Fi物联网设备配网的N种方式

热门文章

  1. 自律 | 最大的修养——妙算哥
  2. CCS10.3安装及win11账户名修改
  3. 物理实验-用落球法测定液体的粘滞系数(仿真实验大厅) 实验报告 重庆理工大学
  4. [计算机网络]DNS域名解析过程
  5. 在 Java 中转义 HTML
  6. 杭州国产嵌入式操作系统技术与产业发展论坛大咖云集,报告摘要先睹为快!...
  7. Redux VS Mobox
  8. coredns 更新部署
  9. vim 支持日语显示
  10. 双加热纸塑分离机 分离牛皮纸袋怎么个两种方法