一.前言
在第一篇的时候我们就讲过, spring ioc 的实现,主要的有两条实现分支,而 DefaultListableBeanFactory 的实现就是我们的第一个 BeanFactory 主要实现分支.
来看一下 DefaultListableBeanFactory 的类结构:
结合我第一篇做的流程图和 idea 生成的流程图,我们下面会重点讲一下左半部分的接口功能,右边类继承会做个简单的讲述.
二.DefaultListableBeanFactory 的接口架构
从左上角开始分析,可以清晰地看出来,DefaultListableBeanFactory 一共实现了哪些接口的方法,也就可以推断出这个容器具备了哪些功能.
(先不考虑 SingletonBeanRegistry)
- BeanFactory
- HierarchicalBeanFactory
- ListableBeanFactory
- AutowireCapableBeanFactory
- ConfigurableBeanFactory
- ConfigurableListableBeanFactory
- SingletonBeanRegistry
- AliasRegistry
- BeanDefinitionRegistry
前四个我们很熟悉,在上一个篇幅我们已经大体讲述了一下接口具有的功能.那么我们从第五个 ConfigurableBeanFactory
开始讲述.
2.1 ConfigurableBeanFactory
从上面的类结构图中我们可以清晰地看到,
ConfigurableBeanFactory
是HierarchicalBeanFactory
的子接口, 而HierarchicalBeanFactory
再上一遍中也描述过,它使 BeanFactory 具备分层的概念.也就是父子容器.
HierarchicalBeanFactory
中的方法只有获取父容器和判断本地 BeanFactory 是否包含指定 name 的 bean.
而 ConfigurableBeanFactory
是 HierarchicalBeanFactory
的子接口,也就体现出 ConfigurableBeanFactory
是在分层能力上的扩展.
ConfigurableBeanFactory 主要功能:
- 设置父容器
- 添加或查询
BeanPostProcessor
,也就是创建 bean 时的前置后置处理器. - 设置类加载器
- 为嵌入值(例如注解属性
@Value(${userName})
)添加String 解析器 - 复制给定的其他 BeanFactory 的所有相关配置
- 摧毁 bean 的实例(全部摧毁或摧毁指定 bean)
- 返回指定 bean 所依赖的所有 bean,和返回依赖指定 bean 的所有 bean
- 返回指定范围的所有 bean (单例 bean 或原型 bean)
- 判断给定 beanName 是