Spring IoC容器与应用上下文的设计与实现

阐述笔者对Spring上下文和容器的理解。

介绍重要的类辅助理解SpringBoot的启动流程。

 

二、Spring IoC容器的设计

  看看下面这张图(摘自《Spring技术内幕》),IoC容器的设计分为两条线,

  BeanFactory ==> HierarchicalBeanFactory ==>ConfigurableBeanFactory ,这条线可以理解成IoC容器的设计路线。

  BeanFactory ==> ListableBeanFactory ==> ApplicationContext ==> ConfigurableApplicationContext ,这条可以成为Spring应用上下文的设计路线。

  为什么这样要分两条线呢,主要是将容器和上下文区分开来。因为在在Spring项目中,上下文对容器不仅是扩展的关系,更重要的是持有的关系,上下文是以属性的形式持有了容器,开发者可以通过上下文对象获取到容器。笔者十分倾向于将二者分开来理解。当然也可以将应用上下文理解成容器的高级表现形式。

Spring IoC容器与应用上下文的设计与实现

 

2.1,IoC容器的设计线路

  BeanFactory定义了IoC容器的基本规范,包括getBean()按类型和按名称的获取Bean的方法。

Spring IoC容器与应用上下文的设计与实现

   

Spring IoC容器与应用上下文的设计与实现

  HierarchicalBeanFactory 在BeanFactory的基础上增加了getParentBeanFactory()方法,使BeanFactory具备了双亲IoC容器管理的功能。

  ConfigurableBeanFactory接口提供了配置BeanFactory的各种方法。比如setParentBeanFactory()方法,配置上面提到的双亲IoC容器,addBeanPostProcessor()方法,配置Bean后置处理器等。

  到这里先埋个包袱:到ConfigurableBeanFactory接口为止,IoC容器还没有具备作为“容器”最基本的功能,那就是能装东西。

 

2.2、应用上下文设计路线

  上面说了应用上下文是IoC容器的高级表现形式,ListableBeanFactory具备了操作BeanDefinition 的能力,比如getBeanDefinitionCount()方法,可以获取Bean的总数等。

  ApplicationContext 类那就厉害了,如下代码所示,实现了一大堆接口

1 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, 2 MessageSource, ApplicationEventPublisher, ResourcePatternResolver

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyxydz.html