spring工厂的基本概念
- spring的核心:工厂(容器)
- spring工厂的职责:对象的创建与存储。创建就不用多说了,存储:spring把创建好的对象存储起来(存储在spring工厂(容器)中),方便以后使用。但是存储有个前提,就是这些对象必须是单实例。
- spring存储单实例对象的方式:map结构,java是面向对象思想,那么多个对象存储的方式就是map
- 最常用的工厂:ApplicationContext(高级工厂)。
- 前期学习会以 beanFactory 工厂来开展学习。这个工厂也是spring最底层的工厂。
spring结构体系
Spring在设计的时候,严格遵守单一职责,所以Spring到目前位置,衍生成了一个非常庞大的体系。而最顶级的就是BeanFactory接口,整个体系都是由BeanFactory衍生出来的。
而衍生出来的产物,子接口一定是在父接口之上提供了一些独有的功能。
BeanFactory接口
Spring最底层的工厂,定义了工厂的基本操作。
下面介绍一下具有独特能力的几个子接口:
HierarchicalBeanFactory接口
beanFactory直接的子接口,这个子接口让工厂具有了继承的能力,也就是我们所说的父子容器、父子工程
AutowireCapableBeanFactory接口
- beanFactory直接的子接口。
- 这个子接口让工厂具有了自动注入的能力。这里说的自动注入的能力也就是定义xml的bean标签的时候,有个属性是autowire属性,这个属性其中有两个属性值,byName,byType
- 所以子接口让工厂具有了初始化能力。
- 接口实现 intinitialBean 接口。
- 重写接口定义的 afterPropertiesSet 方法。
- 在spring容器创建bean的时候,会调用此方法进行初始化操作。
- 这个子接口让工厂具有了销毁的能力。
- 接口实现 DisposeBean 接口。
-
- 重写接口定义的 destroy 方法。
- 在spring容器关闭的时候,会调用此方法进行销毁操作。
ListableBeanFactory接口
- beanFactory直接的子接口
- 通过这个接口,可以获取相关的配置信息。
- constrainsBeanDefinition:判断是否存在某个bean的定义信息。
- getBeanNameForType:基于类型获取所有的bean的名字
ConfigurableBeanFactory接口
这个工厂是个可配置工厂。
- 配置对象是单实例还是多实例
- 类型转换器的功能:在xml中配置bean标签时,属性时日期类型的字符串时(2020-11-11)需要将此字符串转换成日期Date类型,这时候就需要自定义类型转换器了。
- 后置处理bean:beanPostProcessor
ApplicationContext接口
上述的每个工厂都具有自己独有的能力,但是最后所有的能力都集成在了此工厂上。
DefaultListableBeanFactory类
此类同样也集成了上述所有工厂的能力,这个也是spring工厂体系中最为核心的一个类。
XmlBeanFactory类
- 此类是DefaultListableBeanFactory的一个子类,所以这个类也是融合了上面所有工厂的能力。
- 但是他有一点额外的好处,这个类可以使用基于xml配置的信息,完成对象的创建,主要的依赖于XmlBeanDefinitionReader这个工具类。
总结:
- 了解最底层的工厂BeanFactory。
- 了解BeanFactory的直接子接口所具备的各自独特的功能。
- 知道 ApplicationContext 接口是集成性质的一个接口,具有他们所有的能力。
- 知道 DefaultListableBeanFactory 类是集成性质的一个类,具有他们所有的能力。
- 知道 DefaultListableBeanFactory 的子类 XmlBeanFactory ,因为继承所以此类也是集成性质的类,具有他们所有的能力。
主要关注XmlBeanFactory类。这个接口目前已经被弃用了,但是因为这个工厂是比较底层的工厂,前期用这个工厂进行展开学习,等熟悉了整体流程之后,再用别的工厂进行替代。