Spring 源码分析(一)容器的基本实现
一:核心类的介绍
Spring中两个比较重要的类DefaultListableBeanFactory和XmlBeanDefinitionReader,其中:DefaultListableBeanFactory是整个bean加载的核心部分,是spring注册和加载bean的默认实现,它继承了AbstractAutowireCapableBeanFactory,实现了ConfigurableListableBeanFactory, BeanDefinitionRegistry。XmlBeanDefinitionReader的功能是对Spring的资源文件读取,解析及注册的功能。
1:DefaultListableBeanFactory类的结构图
2:DefaultListableBeanFactory类结构图中各个类的作用
- AliasRegistry 定义对alias的简单增删改等操作。
- SimpleAliasRegistry 实现了AliasRegistry,主要使用map作为alias的缓存,使用的是ConcurrentHashMap。
- SingletonBeanRegistry 定义对单例的注册及获取。
- BeanFactory 定义获取bean或bean的各种属性。
- DefaultSingletonBeanRegistry 对接口SingletonBeanRegistry的实现。
- HierarchicalBeanFactory 继承BeanFactory,在BeanFactory的基础上增加获得父接口的方法。
- BeanDefinitionRegistry 定义对BeanDefinition的各种增删改操作。
- FactoryBeanRegistrySupport 在DefaultSingletonBeanRegistry的基础上增加对FactoryBean的特殊处
- ConfigurableBeanFactory 提供配置Factory的各种方法。
- ListableBeanFactory 根据各种条件获取bean的配置清单。
- AbstractBeanFactory 综合了FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
- AbstractAutowireCapableBeanFactory 继承AbstractBeanFactory并对AutowireCapableBeanFactory进行了实现。
- ConfigurableListableBeanFactory: BeanFactory的配置清单,指定忽略类型及接口等。
- DefaultListableBeanFactory 综合上面所有功能,主要是对bean注册后的处理。
3:XmlBeanDefinitionReader 的类结构图
4:XmlBeanDefinitionReader 类结构图中各个类的作用
- ResourceLoader 根据路径加载资源文件,返回对应的Resource。
- BeanDefinitionReader 定义资源文件读取并转换为BeanDefinition的各个功能。
- EnvironmentCapable 定义获取Environment的方法。
- DocumentLoader 定义从资源文件加载到转换为Document的方法。
- AbstractBeanDefinitionReader 对BeanDefinitionReader, EnvironmentCapable的实现。
- BeanDefinitionDocumentReader 定义读取Document并注册BeanDefinition的方法。
- BeanDefinitionParserDelegate 定义解析Element的各个方法。
XmlBeanDefinitionReader 通过继承AbstractBeanDefinitionReader 的方法,可以使用ResourceLoader 的方法将资源文件路径转换为对应的Resource文件。通过DocumentLoader 对Resource文件进行转换,将其转换为Document文件。通过接口BeanDefinitionDocumentReader 的实现类DefaultBeanDefinitionDocumentReader对Document文件进行解析,并使用BeanDefinitionParserDelegate解析Element。