Spring源码分析3 — spring XML配置文件的解析流程
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配置文件的解析流程相关推荐
- spring源码分析第六天------spring经典面试问题
spring源码分析第六天------spring经典面试问题 1.Spring5 新特性及应用举例 2.Spring 经典的面试问题 a.什么是 Spring 框架?Spring 框架有哪些主要模块 ...
- Mybatis 源码分析(一)配置文件加载流程
Mybatis 源码分析(一)配置文件加载流程 1.项目构建 引入依赖 <dependency><groupId>org.mybatis</groupId>< ...
- Spring源码分析4 — spring bean创建和初始化
1 介绍 创建并初始化spring容器中,refresh()方法中解析xml配置文件,注册容器后处理器,bean后处理器,初始化MessageSource,ApplicationEventMultic ...
- uboot源码分析(1)uboot 命令解析流程简析
uboot 命令解析流程简析 uboot正常启动后,会调用main_loop(void)函数,进入main_loop()之后,如果在规定的时间(CONFIG_BOOTDELAY)内,没有检查到任何按键 ...
- spring源码分析之spring注解@Aspect是如何工作的?
AOP(Aspect Orient Programming),面向切面编程,是面向对象编程OOP的一种补充.面向对象编程是从静态角度考虑程序的结构,面向切面编程是从动态的角度考虑程序运行过程. AOP ...
- spring源码分析之spring jmx
JMX架构定义: https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/architecture.html Archi ...
- Spring源码分析(三)
Spring源码分析 第三章 手写Ioc和Aop 文章目录 Spring源码分析 前言 一.模拟业务场景 (一) 功能介绍 (二) 关键功能代码 (三) 问题分析 二.使用ioc和aop重构 (一) ...
- Spring 源码分析衍生篇十 :Last-Modified 缓存机制
文章目录 一.前言 二.Last-Modify 三.实现方案 1. 实现 org.springframework.web.servlet.mvc.LastModified接口 1.1. 简单演示 1. ...
- spring 源码分析(1)-xml文件解析
我们在最开始接触spring的时候,看到不少书spring入门的例子如下 ApplicationContext atx = new ClassPathXmlApplicationContext(&qu ...
最新文章
- 技术要求→物理安全→防盗窃和防破坏
- 机器人图规划算法研究现状简述
- 为什么python不能输入中文_一条命令解决mac版本python IDLE不能输入中文问题
- golden gate 加initial load 在rac 上的配置
- unity3d 常用代码
- Nero刻录软件超级实用技巧大搜罗
- 2021年总结:回顾这不平凡的一年
- 员工不明白面试流程,傻傻等了三个月,收到面试评价短信蒙了
- 产品有感之拼多多——社交更优惠的电商平台
- 分布式环境下对部分热数据(如redis热key,热请求)进行探测,并对探测结果及时同步到各个client实例的JVM内存的方案简述
- 苹果cmsV10MXone Pro自适应模板 站长亲测 全网首发
- NuxtJS 项目部署如何部署到nginx
- c语言求字符串转换成双精度_C语言如何输出双精度浮点型数据
- bzoj3694:最短路(最短路树+并查集)
- 6 生僻字_戓、弚、圡什么鬼?这些生僻字逼死强迫症!
- JavaWeb(华清远见)
- Java 获取当前时间的前几分钟的时间点的方法
- 分享一个运维同学常用的站点监测和测速网站17ce.com, 备用
- 倒计时3天丨2023云和恩墨生态产品发布会即将开启,三大新品蓄势待发
- Wi-Fi物联网设备配网的N种方式