前言
通常使用 Spring 开发,需要指定 spring 的配置文件,里面定义了开发中有可能需要用到的 Bean。Spring 通过 BeanDefinitionReader
,读取配置文件,将 Bean(定义) 加载到容器中。BeanDefinitionReader
支持 *.xml
、*.properties
、*.groovy
三种配置文件的读取。其中 xml 配置文件方式较为常见,下文将以 XmlBeanDefinitionReader
介绍 BeanDefinitionReader
。
类图
Start
1 |
|
构建 XmlBeanDefinitionReader
1 |
|
加载 BeanDefinition
Start 中使用了两种方式加载:1. 直接指定配置文件路径。 2. 将配置文件封装成 Resource
,再作为入参加载。
概念
在介绍如何加载 BeanDefinition
之前,有必要先了解一下 Resource
、Document
。其实配置文件中的 Bean 定义不是直接就被读取、解析成 BeanDefintion
对象的。XmlBeanDefinitionReader
的大致工序是:配置文件(bean-definition-reader.xml
) -> Resource
-> InputSource
-> Document
-> BeanDefinition
。
Resource
Resource
是 Spring 内部的资源抽象,封装了底层资源。Spring 提供了多种资源不同来源的实现,File、Classpath、URL、ByteArray…
-
InputSource
org.xml.sax
包下的接口,用于定义一个 XML 实体。javax.xml.parsers.DocumentBuilder
通过解析InputSource
构建Document
。 -
Document
org.w3c.dom
包下的接口。DOM 是 Document Object Model(文档对象模型)的缩写,定义了如何访问 HTML 、XML 文档的标准。
解析 location 成 Resource
1 |
|
Resource 转 InputSource
1 |
|
解析 InputSource 成 Document
1 |
|
解析 Document
1 |
|
注册 BeanDefinition
1 |
|