一、spring的核心类介绍
1.DefaultListableBeanFactory
XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean的核心加载部分,是spring注册以及加载bean的默认实现方式,而对于XmlBeanFactory与DefaultListableBeanFactory不用的地方是XmlBeanFactory中使用了自定义的xml解析器XmlBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,而DefaultListableBeanFactory是通过继承AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory、BeanDefinitionRegistry两个接口。
DefaultListableBeanFactory的作用:
- DefaultListableBeanFactory是spring注册以及加载bean的默认实现方式
- 默认实现了ListableBeanFactory和BeanDefinitionRegistry接口,基于bean definition对象,是一个成熟的bean factroy。
- 最典型的应用是:在访问bean前,先注册所有的definition(可能从bean definition配置文件中)。使用预先建立的bean定义元数据对象,从本地的bean definition表中查询bean definition因而将不会花费太多成本。
- DefaultListableBeanFactory既可以作为一个单独的beanFactory,也可以作为自定义beanFactory的父类。
结构图如下:
各个类和接口的作用:
AliasRegistry:里面提供了四个方法都是用来操作别名的。
SimpleAliasRegistry:主要使用map作为别名的缓存,并对接口AliasRegistry进行实现。
SingletonBeanRegistry:定义了队单例的注册以及获取。
BeanFactory:定义了获取bean以及bean的各种属性。
DefaultSingletonBeanRegistry:对接口SingletonBeanRegistry中各函数的实现。
HierarchicalBeanFactory:继承了BeanFactory,在BeanFactory的基础上增加了队ParentFactory的支持(ParentFactory)。
BeanDefinitionRegistry:定义了对BeanDefinition的各种操作。
FactoryBeanRegistrySupport:在DefaultSingletonBeanRegistry的基础上增加了对FactoryBean的特殊处理。
ConfigurableBeanFactory:提供了配置Factory的各种方法。
ListableBeanFactory:根据各种条件获取bean的配置清单。
AbstractBeanFactory:综合FactoryBeanRegistrySupport和ConfigurableBeanFactory的功能。
AutowireCapableBeanFactory:提供了创建bean、自动注入、初始化以及应用bean的后处理器。
AbstractAutowireCapableBeanFactory:综合AbstractBeanFactory并对AutowireCapableBeanFactory接口的实现。
ConfigurableListableBeanFactory:BeanFactory配置清单,指定忽略类型以及接口等等。
DefaultListableBeanFactory:主要是对bean注册后的处理
2.XmlBeanDefinitionReader
xml配置文件读取是spring的重要功能,因为spring大部分功能都是以配置文件作为切入点的。下面我们简单了解下
XMLBeanDefinitionReader中读取、解析和注册的大体流程。
结构图如下:
各个类和接口的作用:
AbstractBeanDefinitionReader:对EnvironmentCapable、BeanDefinitionReader类定义的功能进行实现。
BeanDefinitionReader:主要定义资源文件读取并转换为BeanDefinition的各个功能。
EnvironmentCapable:定义获取Environment方法(Environment的使用方式是通过@Autowired织入)。
XML配置文件读取的大致流程:
- loadBeanDefinitions是加载BeanDefinition接口的核心入口。并且将Resource构造为一个EncodedResource。
- doLoadBeanDefinitions是真正执行加载的方法,该方法获取了xml文件的格式,并把其解析为dom格式。
- 之后执行了registerBeanDefinitions方法注册BeanDefinition,这里通过BeanDefinitionDocumentReader定义了解析dom的方式。
- 然后就进到了DefaultBeanDefinitionDocumentReader中,通过断当前解析元素是否属于默认的命名空间来决定解析方式,然后根据定义方式进行解析。整个解析过程就完成了。
本人是第一次写博客,该文章是读书后的一些笔记加上网上一些帖子整合出来的整理笔记,可能内容很含糊甚至有错误的部分,希望看到这篇文章的人能够给出指正大家共同进步,有不明白的地方也可以私信我一起交流,千里之行始于足下,只有行动派才有成功的资质。