spring-bean 的两个核心的类:DefaultListableBeanFactory , XmlBeanDefinitionReader
1.DefaultListableBeanFactory
XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册及加载bean的默认实现,而对于XmlBeanFactory与DefaultListableBeanFactory不同的地方其实是在XmlBeanFactory中使用了定义的XML读取器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口.
XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,主要用于从xml文档中读取BeanDefinition,对于注册及获取Bean都是使用从父类DefaultListableBeanFactory继承的方法去实现,而唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性,在XmlBeanFactory中主要使用Reader属性对资源文件进行读取和注册.
首先我们可以看下结构:
1.AliasRegistry: 定义了对alias的简单操作,registerAlias,removeAlias,isAlias,getAliases.
2.SimpleAliasRegistry:主要适用map作为alias的缓存,并对接口AliasRegistry进行实现.
3.SingletonBeanRegistry:定义对单例的注册及获取.
4.BeanFactory:定义获取bean及bean的各种属性.
5.DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry各函数的实现及对单例bean的一些常用函数的扩展.
6.HierarchicalBeanFactory:继承BeanFactory也就是在BeanFactory定义功能的基础上增加了对parentFactory的支持.
7.BeanDefinitionRegistry: 定义对BeanDefinition的各种增删改操作.
8.FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry基础上增加了对FactoryBean的特殊处理功能.
9.ConfigurableBeanFactory: 提供factory的各种方法.
10.ListableBeanFactory:继承BeanFactory接口,根据各种条件获取bean的配置清单.
11.AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory 的方法.
12.AutowireCapableBeanFactory: 继承BeanFactory,提供创建bean,自动注入,初始化以及应用bean的后处理器.
13.AbstractAutowireCapableBeanFactory:综合AutowireCapableBeanFactory和AbstractBeanFactory的方法.
14.ConfigurableListableBeanFactory:BeanFactory配置清单, 指定忽略类型及接口等.
15.DefaultListableBeanFactory:综合上面的功能,主要是对Bean注册后的处理.
XmlBeanFactory对DefaultListableBeanFactory类进行了扩展,主要用于从xml文档中读取BeanDefinition,对于注册及获取Bean都是使用从父类DefaultListableBeanFactory继承的方法去实现,而唯独与父类不同的个性化实现就是增加了XmlBeanDefinitionReader类型的reader属性.在XmlBeanFactory中主要使用reader属性对资源文件进行读取和注册.
2.XmlBeanDefinitionReader
xml配置文件的读取时spring中主要的功能,因为spring的大部分功能都是以配置作为切入点的,那么我们可以从XmlBeanDefinitionReader中梳理一下资源文件读取,解析及注册的大致脉络.
(1). 通过继承自AbstractBeanDefinitionReader中的方法,来使用ResourceLoader将资源路径转换为对应的Resource文件.
(2). 通过DocumentLoader对Resource文件进行转换,将Resource文件转换为Document文件.
(3). 通过实现接口BeanDefinitionDocumentReader的DefaultBeanDefinitionDocumentReader类对Document进行解析,并使用BeanDefinitionParserDelegate对Element进行解析.
1.ResourceLoader: 定义资源加载器,主要用于根据给定的资源文件地址返回对应的Resource.
2.BeanDefinitionReader: 主要定义资源文件读取并转换为BeanDefinition的各个功能.
3.EnvironmentCapable: 定义获取Environment方法.
4.DocumentLoader: 定义从资源文件加载到转换为Document的功能.
5.AbstractBeanDefinitionReader: 对EnvironmentCapable,BeanDefinitionReader类定义的功能进行实现.
6.BeanDefinitionDocumentReader: 定义获取Document并注册BeanDefinition功能.
7.BeanDefinitionParserDelegate: 定义解析Element的各种方法.
下面看下XmlBeanFactory的调用时序图,了解做了什么,
主要是弄明白,resource是如何封装的和XmlBeanFactory是如何封装的.