核心类介绍
1.DefaultListableBeanFactory
DefaultListableBeanFactory 是整个 Bean 加载的核心部分,是 Spring 注册及加载 Bean 的默认实现,XmlBeanFactory 继承自 DefaultListableBeanFactory ,XmlBeanFactory 自定义了 XML 读取器 XmlBeanDefinitionReader,实现了个性化的 BeanDefinitionReader 读取。
DefaultListableBeanFactory 继承关系:
image.png
-AliasRegistry: 定义了对 Alias 简单的增删改操作。
-SimpleAliasRegitry: 使用了 Map 作为 Alias 的缓存,并实现 AliasRegistry 接口。
-SingletonBeanRegistry: 定义对单例的注册获取。
-BeanFactory: 获取 bean 以及 bean 的 isSingleton,isPrototype,isTypeMatch 等属性。
-DefaultSingletonBeanRegistry: 对 SingletonBeanRegistry 的实现。
-HierarchicalBeanFactory: 继承 BeanFactory, 在此基础增加了对 ParentBeanFactroy 的支持,多出 BeanFactory getParentBeanFactory();和 boolean containsLocalBean(String name);方法。
-BeanDefinitionRegistry: 继承 AliasRegitry,定义了对 BeanDefinitionRegistry 的基本操作。
-FactoryBeanRegistrySupport : 继承 DefaultSingletonBeanRegistry,并在此基础上增加对 FactoryBean 的一些操作。
-ConfigurableBeanFactory:提供配置Factory的各种方法。
-ListableBeanFactory: 获取Bean的配置清单。
-AbstractBeanFactory: 综合 FactoryBeanRegitrySupport 和 ConfigurableBeanFactory 的功能。
-AutowireCapableBeanFactory: 提供创建 bean,自动注入,初始化以及应用 bean 的后处理器。
-AbstractAutowireCapableBeanFactory:结合 AbstractBeanFactory 和 接口 AutowireCapableBeanFactory。
-ConfigurableListableBeanFactory : BeanFactory 配置清单,指定忽略类型及接口等。
-DefaultListableBeanFactory: 综合上述所有功能,主要是对 bean 注册后的处理。
2.XmlBeanDefinitionReader
XML 配置文件的读取是 Spring 中重要的功能,因为 Spring 的大部分功能都是以配置作为切入点。
XmlBeanDefinitionReader 相关图:
-ResourceLoader:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的 Resource;
-BeanDfinitionReader:主要定义资源文件的读取并转换为BeanDefinition的各个功能;
-EnvironmentCapable:定义获取 Environment 方法;
-DocumentLoader:定义从资源文件加载到转换为 Document 的功能;
-AbstractBeanDefinitionReader:对 EnvironmentCapable,BeanDefinitionReader 类定义的功能进行实现;
-BeanDefinitionDocumentReader:定义读取Document并注册 BeanDefinition 的功能;
-BeanDefinitionParserDelegate:定义解析Element的各种方法;
Xml 配置文件读取大致流程:
1、通过继承自AbstractBeanDefinitionReader中的方法,来使用ResourLoader将资源文件路径转换对应的Resource文件;
2、通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件
3、通过实现BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Docment进行解析,并使用BeanDefinitionPareserDelegate对Element进行解析
网友评论