13.2.1 Bean组件

前面已经说明了Bean组件对Spring的重要性,下面看看Bean组件是怎么设计的。Bean组件在Spring的org.springframework.beans包下。这个包下的类主要解决了3件事:Bean的定义、Bean的创建及对Bean的解析。对Spring的使用者来说唯一需要关心的就是Bean的创建,其他两个由Spring在内部帮你完成,对你来说是透明的。

Spring Bean的创建是典型的工厂模式,它的顶级接口是BeanFactory,图13-3是这个工厂的继承层次关系。

深入分析javaweb技术内幕之Spring框架的设计理念与设计模式分析

BeanFactory有3个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。但是从图13-3中我们发现最终的默认实现类是DefaultListableBeanFactory,它实现了所有的接口。为何要定义这么多层次的接口呢?查阅这些接口的源码和说明可以发现每个接口都有它使用的场合,它主要是为了区分在Spring内部对象的传递和转化的过程中,对对象的数据访问所做的限制。例如,ListableBeanFactory接口表示这些Bean是可列表的,而HierarchicalBeanFactory表示这些Bean是有继承关系的,也就是每个Bean有可能有父Bean,AutowireCapableBeanFactory接口定义Bean的自动装配规则。这4个接口共同定义了Bean的集合、Bean之间的关系和Bean的行为。

Bean的定义主要由BeanDefinition描述,图13-4说明了这些类的层次关系。

深入分析javaweb技术内幕之Spring框架的设计理念与设计模式分析

Bean的定义完整地描述了在Spring的配置文件中你定义的<bean/>节点中所有的信息,包括各种子节点。当Spring成功解析你定义的一个<bean/>节点后,在Spring内部它就被转化成BeanDefination对象,以后所有的操作都是对这个对象进行的。

深入分析javaweb技术内幕之Spring框架的设计理念与设计模式分析

13.2.2 Context组件

Context在Spring的org.springframework.context包下,前面已经讲解了Context组件在Spring中的作用,它实际上就是给Spring提供一个运行时的环境,用以保存各个对象的状态。下面看一下这个环境是如何构建的。

ApplicationContext是Context的顶级父类,它除了能标识一个应用环境的基本信息外,还继承了5个接口,这5个接口主要是扩展了Context功能。图13-6是与Context相关的类结构图。

深入分析javaweb技术内幕之Spring框架的设计理念与设计模式分析

从上图可以看出,ApplicationContext继承了BeanFactory,这也说明了Spring容器中运行的主体对象是Bean。另外ApplicationContext继承了ResourceLoader接口,使得ApplicationContext可以访问到任何外部资源,这些将在Core中详细说明。

ApplicationContext的子类主要包含两个方面:

  • ConfigurableApplicationContext表示该Context是可修改的,也就是在构件Context中,用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的Context,即AbstractRefreshableApplicationContext类。
  • WebApplicationContext顾名思义就是为Web准备的Context,它可以直接访问ServletContext,通常情况下,这个接口使用的很少。

总体来说ApplicationContext必须要完成以下几件事情。

  • 标识一个应用环境
  • 利用BeanFactory创建Bean对象
  • 保存对象关系表。
  • 能够捕获各种事件。

Context作为Spring的Ioc容器,基本上整合了Spring的大部分功能,或者说是大部分功能的基础。

Core组件主要是通过Resource接口做了些资源的访问

相关文章:

  • 2022-01-19
  • 2022-02-18
猜你喜欢
  • 2021-12-03
  • 2021-12-01
  • 2021-10-08
相关资源
相似解决方案