Spring BeanFactory继承体系

体系结构图

Spring BeanFactory继承体系
这是BeanFactory基本的类体系结构,这里没有包括强大的ApplicationContext体系。

四级接口继承体系

  1. BeanFactory 作为一个主接口不继承任何接口,暂且称为一级接口。
  2. AutowireCapableBeanFactory、HierarchicalBeanFactory、ListableBeanFactory 3个子接口继承了它,进行功能上的增强。这3个子接口称为二级接口。
  3. ConfigurableBeanFactory 可以被称为三级接口,对二级接口 HierarchicalBeanFactory 进行了再次增强,它还继承了另一个外来的接口 SingletonBeanRegistry
  4. ConfigurableListableBeanFactory 是一个更强大的接口,继承了上述的所有接口,无所不包,称为四级接口。

总结

这个设计采用了设计模式原则里的接口隔离原则。
|-- BeanFactory 是Spring bean容器的根接口。最主要的方法就是getBean(String beanName),提供获取bean,是否包含bean,是否单例与原型,获取bean类型,bean 别名的api。
|-- – AutowireCapableBeanFactory 提供工厂的装配功能。
|-- – HierarchicalBeanFactory 提供父容器的访问功能。
|-- – -- ConfigurableBeanFactory 如名,提供factory的配置功能,好多api。
|-- – -- – ConfigurableListableBeanFactory 集大成者,提供解析,修改bean定义,并初始化单例。
|-- – ListableBeanFactory 提供容器内bean实例的枚举功能.这边不会考虑父容器内的实例。

继承关系的2个抽象类和2个实现类:

  1. AbstractBeanFactory 作为一个抽象类,实现了三级接口 ConfigurableBeanFactory 大部分功能。
  2. AbstractAutowireCapableBeanFactory 同样是抽象类,继承自 AbstractBeanFactory ,并额外实现了二级接口 AutowireCapableBeanFactory 。
  3. DefaultListableBeanFactory 继承自 AbstractAutowireCapableBeanFactory ,实现了最强大的四级接口 ConfigurableListableBeanFactory ,并实现了一个外来接口BeanDefinitionRegistry ,它并非抽象类。
  4. 最后是最强大的 XmlBeanFactory ,继承自 DefaultListableBeanFactory ,重写了一些功能,使自己更强大。

定义这么多层次的接口的原因

查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在Spring内部。
在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如:

  • ListableBeanFactory接口表示这些Bean是可列表的,
  • HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。
  • AutowireCapableBeanFactory接口定义Bean的自动装配规则。

这四个接口共同定义了Bean的集合、Bean之间的关系、以及Bean行为。