Spring IOC容器的核心接口设计
Spring IOC容器的接口设计
下面针对图中的接口关系做一个详细的介绍
- 从接口
BeanFactory
到HierarchicalBeanFactory
,再到ConfigurableBeanFactory
是一条主要的BeanFactory
的设计路径,在这条接口设计路径中BeanFactory
定义了基本的IOC容器的规范。在这个接口定义中,包括了getBean()
这样的IOC容器的基本方法。而HierarchicalBeanFactory
接口在继承了BeanFactory
接口之后,增加了getParentBeanFactory()
的接口功能,使BeanFactory
具备了双亲IOC容器的管理功能。再接下来的ConfigurableBeanFactory
接口中主要定义了一些对BeanFactory
的配置功能,比如通过setParentBeanFactory()
设置双亲IOC容器,通过addBeanPostProcessor()
设置bean的后置处理等。通过这些接口设计的叠加,定义了BeanFactory
就是简单IOC容器的基本功能。 - 第二条接口设计主线是从
ApplicationContext
应用上下文为核心的接口设计,这里涉及的接口设计有,从BeanFactory
到ListableBeanFactory
再到ApplicationContext
再到我们常用的WebApplicationContext
或者ConfigurableApplicationContext
接口。我们常用的应用上下文基本上都是ConfigurableApplicationContext
或者WebApplicationContext
的实现。在这个接口体系中ListableBeanFactory
和HierarchicalBeanFactory
连个接口,连接BeanFactory
的接口定义和ApplicationContext
的接口定义。在ListableBeanFactory
接口中细化了很多BeanFactory
的接口功能,比如定义了String[] getBeanDefinitionNames()
接口方法,HierarchicalBeanFactory
前面已经提到过主要是增加了双亲IOC的功能,ApplicationContext
接口,它通过继承MessageSource
、ResourceLoader
、ApplicationEventPublisher
接口,在BeanFactory
简单IOC容器的基础上添加了许多对高级容器的特性的支持。 - 这里涉及的主要接口关系,而具体的IOC容器都是在这个接口体系下实现的,比如
DefaultListableBeanFactory
,这个基本IOC容器的实现就是实现了ConfigurableListableBeanFactory
,从而成为一个简单IOC容器的实现。像其他IOC容器,比如XmlBeanFactory
,都是基于DefaultListableBeanFactory
基础上做的拓展,同样的ApplicationContext
的实现也是如此。 - 这个接口系统是以
BeanFactory
和ApplicationContext
为核心的。而BeanFactory
又是IOC容器的最基本接口,在ApplicationContext
的设计中,一方面,可以看到它继承了BeanFactory
接口体系中的ListableBeanFactory
、AutowrieCapableBeanFactory
、HierarchicalBeanFactory
等BeanFactory
接口,具备了BeanFactory
IOC 容器的基本功能;另一方面,通过集成MessageSource
、ResourceLoader
、ApplicationEventPublisher
这些接口,BeanFactory
为ApplicationContext
赋予了更高级的IOC容器特性。对于ApplicationContext
还设计了web环境下使用的WebApplicationContext
接口。
IOC容器核心链路设计如下: