beans包的层级结构
- src/main/java 用于展现Spring的主要逻辑
- src/main/resources 用于存放系统的配置文件
- src/test/java 用于对主要逻辑进行单元测试
- src/test/resources 用于存放测试用的配置文件
两个核心类的介绍
1、DefaultListableBeanFactory
DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载Bean的默认实现.
AliasRegistry
:定义对alias的简单增删改等操作SimpleAliasRegistry
:主要使用map作为alias的缓存,并对接口AliasRegistry
进行实现SingletonBeanRegistry
:定义对单例的注册及获取BeanFactory
:定义获取bean及bean的各种属性DefaultSingletonBeanRegistry
:对接口SingletonBeanRegistry
各函数的实现.HierarchicalBeanFactory
:在BeanFactory
的基础上增加了parentFactory
的支持BeanDefinitionRegistry
:该接口定义对BeanDefinition
的各种增删改的操作.ListableBeanFactory
:根据各条件获取bean的配置清单FactoryBeanRegistrySupport
:在DefaultSingletonBeanRegistry
基础上增加了对FactoryBean
的特殊处理ConfigurableBeanFactory
:提供配置Factory的各种方法AbstractBeanFactory
:综合了FactoryBeanRegistrySupport
和ConfigurableBeanFactory
的功能AutowireCapableBeanFactory
:提供创建bean、自动注入、初始化以及应用bean的后处理器AbstractAutowireCapableBeanFactory
:该类综合了AbstractBeanFactory
并对接口AutowireCapableBeanFactory
进行实现.ConfigurableListableBeanFactory
,该接口是BeanFactory
的配置清单,指定忽略类型及接口等.
2、XmlBeanDefinitionReader
功能主要是对资源文件进行读取和注册.
介绍一下上面提到的各个类和接口的功能:
ResourceLoader
:定义资源加载器,主要应用于根据给定的资源文件地址返回对应的ResourceBeanDefinitionReader
:主要定义资源文件读取并转化为BeanDefinition的各个功能.EnvironmentCapable
:定义获取Environment方法DocumentLoader
:定义从资源文件加载到转换为Document的功能AbstractBeanDefinitionReader
:对EnvironmentCapable
、BeanDefinitionReader
定义的功能进行实现.BeanDefinitionDocumentReader
:定义读取Document
并注册BeanDefinition
功能.BeanDefinitionParserDelegate
:定义解析Element
的各种方法.
整个XML配置文件读取的大致流程:
- 通过
AbstractBeanDefinitionReader
中的方法,来使用ResourceLoader
将资源文件路径转化为Resource
文件 - 通过
DocumentLoader对Resource
文件进行转换,将Resource
文件转化为Document文件 - 通过实现接口
BeanDefinitionDocumentReader
的DefaultBeanDefinitionDocumentReader
类对Document
进行解析,并使用BeanDefinitionParserDelegate
对Element
进行解析.
对比XmlBeanFactory与DefaultListableBeanFactory
XmlBeanFactory是对DefaultListableBeanFactory,主要用于从XML文档中读取BeanDefinition,对于注册及获取bean都是使用从DefaultListableBeanFactory里继承的方法去实现,而唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性.