Spring IOC容器的核心接口设计(三)

Spring IOC容器的接口设计

下面针对图中的接口关系做一个详细的介绍

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

IOC容器核心链路设计如下:
IOC容器核心链路

发布了41 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Yunwei_Zheng/article/details/104844280