Spring的IOC容器有两条主线: BeanFactory 和 ApplicationContext :
话不多说,直接上图:
上图分别是BeanFactory和ApplicationContext的接口体系,在每个接口(或抽象类,实现类)旁都标注了该类的作用
是不是看不过来?没关系,我们慢慢分析.
BeanFactory作为一个最基本的接口类出现在Spring的IOC容器体系中,为IOC容器的具体实现制定基本的功能规范,体现了Spring为提供给用户使用的IOC容器所设定的最基本的功能规范。包括Bean的获取以及一些类型判断等功能.
从接口BeanFactory到HierarchicalBeanFactory,再到ConfigurableBeanFactory,是一条主要的BeanFactory设计路径。
在这条设计路径中,BeanFactory接口定义了基本的IOC容器的规范,包括了getBean()这样的IOC容器的基本方法。而HierarchicalBeanFactory接口在继承了BeanFactory的基本接口之后,增加了getParentBeanFactory(),使BeanFactory具备了双亲IOC容器的管理功能。在ConfigurableBeanFactory中主要定义对BeanFactory的配置功能,比如设置双亲容器,配置Bean后置处理器等。通过这些接口设计的叠加,定义了BeanFactory就是简单IOC容器的基本功能。
这里涉及的是主要接口关系,而具体的IOC容器都是在这个接口体系下实现的,比如我们熟知的DefaultListableBeanFactory,这个基本IOC容器的实现就是实现了ConfigurableBeanFactory,从而成为一个简单IOC容器的实现。
第二条设计主线,是以ApplicationContext为核心的接口设计。
BeanFactory--》ListableBeanFactory--》ApplicationContext--》ConfigurableApplicationContext.
在这个接口体系中,ListableBeanFactory和HierarchicalBeanFactory两个接口连接Beanfactory定义和ApplicationContext定义。
在ListableBeanFactory中,细化了许多BeanFactory的接口功能。而ApplicationContext通过继承MessageSource、ResourceLoader、ApplicationEventPublisher接口,在BeanFactory简单容器的基础上添加了许多对高级容器的特性的支持。