Spring核心容器体系结构简述

读者从spring5下载,并源码编译。这里推荐IntelliJ IDEA 工具进行操作

1.核心容器简述

https://github.com/spring-projects/spring-framework.git
https://github.com/spring-projects/spring-framework.git

(1) BeanFactory

Spring Bean 的创建是典型的工厂模式,这一系列的 Bean 工厂,也即 IOC 容器为开发者管理对象间的依赖关系提供了很多便利和基础服务,在 Spring 中有许多的 IOC 容器的实现供用户选择和使用,其相互关系如下:


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

最基本的 IOC 容器接口 BeanFactory


在 BeanFactory 里只对 IOC 容器的基本行为作了定义,根本不关心你的 Bean 是如何定义怎样加载的。正如我们只关心工厂里得到什么的产品对象,至于工厂是怎么生产这些对象的,这个基本的接口不关心。而要知道工厂是如何产生对象的,我们需要看具体的 IOC 容器实现,Spring 提供了许多 IOC 容器的实现。比如 XmlBeanFactory,ClasspathXmlApplicationContext 等。其中 XmlBeanFactory 就是针对最基本的 IOC 容器的实现,这个 IOC 容器可以读取 XML 文件定义的 BeanDefinition(XML 文件 中对 bean 的描述) , XmlBeanFactory 是容器中的简单版, ApplicationContext 应该算容器中的增强版。ApplicationContext Spring 提供的一个高级的 IOC 容器, 它除了能够提供 IOC 容器的基本功能外, 还为用户提供了以下的附加服务。ApplicationContext 接口的实现, 我们看出其特点:

1.支持信息源, 可以实现国际化。 (实现 MessageSource 接口)
2.访问资源。 (实现 ResourcePatternResolver 接口)
3.
支持应用事件。 (实现 ApplicationEventPublisher 接口)

(2) BeanDefinition

SpringIOC 容器管理了我们定义的各种 Bean 对象及其相互的关系,Bean 对象在 Spring 实现中是BeanDefinition 来描述的,其继承体系如下:


Bean 的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。Bean 的解析主要就是对 Spring 配置文件的解析。这个解析过程主要通过下图中的类完成:



猜你喜欢

转载自blog.csdn.net/m0_37444820/article/details/80790743
今日推荐