Spring 容器的基本实现

主要类:
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);
        }
    }

Spring bean默认标签解析注册原理
Spring bean自定义标签解析注册原理

猜你喜欢

转载自blog.csdn.net/u010811939/article/details/80360094