# Spring
源码 - 核心类
Spring
版本:Spring 5.3.13-release
# 1、核心类DefaultListableBeanFactory
DefaultListableBeanFactory
是Spring
整个Bean
加载的核心部分,是Spring
注册以及加载Bean
的默认实现。DefaultListableBeanFactory
继承了AbstractAutowireCapableBeanFactory
并实现了ConfigurableListableBeanFactory
以及BeanDefinitionRegistry
接口。
DefaultListableBeanFactory
类图:
每个类的作用:
AliasRegistry
接口:定义管理alias
的通用接口,对aliases
的增删改等操作。SimpleAliasRegistry
类:主要使用map
作为alias
的缓存,并对接口AliasRegistry
进行实现。SingletonBeanRegistry
接口:定义对于单实例Bean
的注册以及获取。BeanFactory
接口:定义获取Bean
以及Bean
的各种属性,是Spring
中IOC
的思想的实现接口之一。BeanDefinitionRegistry
接口:定义对于BeanDefinition
的各种增删改查操作,与之关联的有BeanDefinitionRegistryPostProcessor
接口。DefaultSingletonBeanRegistry
类:对接口SingletonBeanRegistry
的实现。HierarchicalBeanFactory
接口:是BeanFactory
的子接口,在BeanFactory
的基础功能上提供对parentBeanFactory
的拓展。ListableBeanFactory
接口:是BeanFactory
的子接口,在BeanFactory
的基础功能上提供根据各种条件获取Bean
的配置清单。FactoryBeanRegistrySupport
抽象类:继承DefaultSingletonBeanRegistry
类,在其基础上提供对FactoryBean<T>
的特殊处理功能。ConfigurableBeanFactory
接口:继承SingletonBeanRegistry
与HierarchicalBeanFactory
接口。提供配置BeanFactory
的各种方法。AbstractBeanFactory
抽象类:综合FactoryBeanRegistrySupport
和ConfigurableBeanFactory
的功能。AutowireCapableBeanFactory
接口:继承BeanFactory
接口,在BeanFactory
的基础功能上提供对创建Bean
、自动注入、初始化、Bean
的后置处理器(增强器)。AbstractAutowireCapableBeanFactory
抽象类:继承AbstractBeanFactory
并实现AutowireCapableBeanFactory
。ConfigurableListableBeanFactory
接口:BeanFactory
配置清单,指定忽略类型及接口等。DefaultListableBeanFactory
:综合上面所有功能,实现对Bean
注册后的一些列处理。
# 2、核心类XmlBeanDefinitionReader
XML
配置文件方式读取BeanDefinition
是Spring
中的重要功能之一。
ResourceLoader
接口:定义Spring
的XML
配置文件加载器,通过指定的XML
配置文件的location
将配置文件加载为对应的Resource
。BeanDefinitionReader
接口:提供从XML
配置文件中读取BeanDefintion
的各种功能。EnvironmentCapable
接口:提供获取Environment
环境的功能。AbstractBeanDefinitionReader
抽象类:实现BeanDefinitionReader
和EnvironmentCapable
,对两者的功能进行具体的抽象实现。DocumentLoader
接口:提供将读取XML
配置文件获取的Resource
转换为Document
的功能。BeanDefinitionDocumentReader
接口:将从Spring
的XMl
配置文件中读取的BeanDefinition
的Document
转换为BeanDefinition
并进行注册。BeanDefinitionParserDelegate
类:定义解析Document
中Element
的各种方法。
GitHub源码地址:https://github.com/kapbc/kapcb-spring-source/tree/master/Spring-Framework-v5.3.13
备注:此文为笔者学习
Spring
源码的笔记,鉴于本人技术有限,文中难免出现一些错误,感谢大家批评指正。