有人说,DefaultListableBeanFactory是spring的发动机,其实重要性不为过。TA的整体类图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8ac67ff15183982fdceba8c961731f83.png)
这里先概述接口部分:
BeanFactory是Spring的最根的接口,类的工厂接口。HierarchicalBeanFactory接口是在继承BeanFactory的基础上,实现BeanFactory的父子关系。
![](https://i-blog.csdnimg.cn/blog_migrate/5b26b30df11a475e927557260ff38751.png)
AutowireCapableBeanFactory接口是在继承BeanFactory的基础上,实现Bean的自动装配功能
![](https://i-blog.csdnimg.cn/blog_migrate/d7a67b4c2e375facc3f665a489525bc1.png)
ListableBeanFactory接口是在继承BeanFactory的基础上,实现Bean的list集合操作功能
![](https://i-blog.csdnimg.cn/blog_migrate/bf67a030014f3b0c3c745a5d4640bede.png)
ConfigurableBeanFactory接口是在继承HierarchicalBeanFactory的基础上,实现BeanFactory的全部配置管理功能, SingletonBeanRegistry是单例bean的注册接口
![](https://i-blog.csdnimg.cn/blog_migrate/131a4eb741b0cf1300211a8780cd0ddd.png)
ConfigurableListableBeanFactory接口是继承AutowireCapableBeanFactory,ListableBeanFactory,ConfigurableBeanFactory三个接口的一个综合接口
![](https://i-blog.csdnimg.cn/blog_migrate/8d11cd47306600c503db370ff396aefb.png)
在概述类部分:
AliasRegistry接口是别名注册接口,SimpleAliasRegistry类是简单的实现别名注册接口的类。
![](https://i-blog.csdnimg.cn/blog_migrate/154a9a27c39d6e531a9bb057eb494108.png)
DefaultSingletonBeanRegistry是默认的实现SingletonBeanRegistry接口的类,同时,继承类SimpleAliasRegistry 。
![](https://i-blog.csdnimg.cn/blog_migrate/e52499a8db1ec2fdb0a42dffa309978d.png)
FactoryBeanRegistrySupport是实现FactoryBean注册的功能实现。继承类DefaultSingletonBeanRegistry 。
![](https://i-blog.csdnimg.cn/blog_migrate/57e97c4f1c69efa7a568ebfd3f4831e3.png)
AbstractBeanFactory是部分实现接口ConfigurableBeanFactory,并继承类FactoryBeanRegistrySupport 。
![](https://i-blog.csdnimg.cn/blog_migrate/ea9b551466116ce3dd70af1d336d88df.png)
AbstractAutowireCapableBeanFactory是实现接口AutowireCapableBeanFactory,并继承类 AbstractBeanFactory 。
![](https://i-blog.csdnimg.cn/blog_migrate/c0fa4b040a534e2211b3dfe0d4fe231e.png)
最后,DefaultListableBeanFactory实现接口 ConfigurableListableBeanFactory、BeanDefinitionRegistry(bean定义的注册接口), 并继承AbstractAutowireCapableBeanFactory,实现全部类管理的功能。
DefaultListableBeanFactory其实要实现的功能就是以list集合的方式操作bean,为什么要拆成这么多的类和接口呢。这里面可能基于几点考虑。
1 功能的不同维度,分不同的接口,方便以后的维护和其他人的阅读。如:AutowireCapableBeanFactory、ListableBeanFactory、HierarchicalBeanFactory等
2 不同接口的实现,分布在不同的之类里,方便以后不同接口多种实现的扩展
3 从整个类图的分布,可以看出spring在这块是面向接口编程,后面类的实现,他们认为只是接口功能实现的一种,随时可以拓展成多种实现