主要类:
ResourceLoader:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的Resource
BeanDefinitionReader(XmlBeanDefinitionReader):主要定义资源文件读取并转换为BeanDefinition的各个功能
EnvironmentCapable:定义获取Environment方法
DocumentLoader:定义从资源文件加载到转换Document的功能
BeanDefinitionDocumentReader(DefaultBeanDefinitionDocumentReader):读取Document,注册BeanDefinition
类图:
时序图:
步骤2(XmlBeanDefinitionReader类): 通过集成自AbstractBeanDefinitionReader中的方法,来使用ResourceLoadr将资源文件路径转换成该对应Resource文件,通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document
步骤3(DefaultBeanDefinitionDocumentReader类):通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析
在DefaultBeanDefinitionDocumentReader类解析并注册并源码:
protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {
if (delegate.isDefaultNamespace(root)) {
NodeList nl = root.getChildNodes();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node instanceof Element) {
Element ele = (Element) node;
if (delegate.isDefaultNamespace(ele)) {
// 解析默认标签
parseDefaultElement(ele, delegate);
}
else {
// 解析自定义标签
delegate.parseCustomElement(ele);
}
}
}
}
else {
delegate.parseCustomElement(root);
}
}