A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 别问问就是三年 初级黑马   /  2019-8-2 14:50  /  633 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、Spring理念剖析

Spring总共有十几个组件,但真正核心的只有三个:Core、Context和Bean。我们将从这三个组件入手来分析Spring。

Spring之中最重要的当属Bean了,Spring实际上就是面向Bean的编程,Bean对于Spring的意义就好比Object对于OOP的意义一样。那么,三个核心组件之间是如何协同工作的呢?如果把Bean比作一场演出中的演员,那么Context就是这场演出的舞台,Core就是演出的道具,至于演出的节目,就是Spring的一系列特色功能了。

我们知道Bean包裹的是Object,而Object中必然有数据,Context就是给这些数据提供生存环境,发现每个Bean之间的关系,为他们建立并维护好这种关系。这样来说,Context就是一个Bean关系的集合,这个关系集合就是我们所说的IOC容器。那么Core又有什么作用呢?Core就是发现、建立和维护每个Bean之间的关系所需的一系列工具,就是我们经常说的Util。

下面我们来看看三个核心组件的详细结构。

2、组件结构详解

Bean组件在Spring的org.springframework.beans包下,主要完成了Bean的创建、Bean的定义以及Bean的解析三件事。

SpringBean的创建时典型的工厂模式,其工厂的继承层次关系如图所示,BeanFactory为顶级接口。


BeanFactory的最终默认实现类是DefaultListableBeanFactory,他实现了所有的接口。为什么要定义怎么多层次的接口呢?实际上,里面的每个接口都有他使用的场合,它主要是为了区分在Spring内部对象的传递和转化过程中,对对象的数据访问所做的限制。这些接口共同定义了Bean的集合、Bean之间的关系和Bean的行为。

Bean的定义主要由BeanDefinition描述,其完整的描述了在Spring配置文件中定义的<bean/>节点的所有信息,包括子节点。当一个<bean/>节点被成功解析之后,在Spring内部它会被转化成一个BeanDefinition对象,接下来的所有操作都是对这个对象进行的。


Bean的解析主要是对Spring配置文件的解析,这个过程非常复杂,下图是Bean的解析类。


Context组件:

前面说到,Context组件的作用是给Spring提供一个运行时的环境,用以保存各个对象的状态,我们来看一下与Context相关的类结构图。


从图中可以看出,Context类结构的顶级父类是ApplicationContext,它除了能标识一个应用环境的基本信息以外,还继承了5个接口,这5个接口主要是扩展了Context的功能。ApplicationContext的子类主要包含两个方向,图中已作说明。再往下就是构建Context的文件类型,接着就是访问Context的方式。

Core组件:

Core组件一个重要的组成部分就是定义了资源的访问方式。Core组价把所有的资源都抽象成一个接口,这样,对于资源使用者来说,不需要考虑文件的类型。对资源提供者来说,也不需要考虑如何将资源包装起来交给别人使用(Core组件内所有的资源都可以通过InputStream类来获取)。另外,Core组件内资源的加载都是由ResourceLoader接口完成的,只要实现这个接口就可以加载所有的资源。


那么,Context和Resource是如何建立关系的呢?通过前面Context的介绍我们知道,Context组件里面的类或者接口最终都实现了ResourcePatternResolver接口,ResourcePatternResolver接口的作用就是加载、解析和描述资源。这个接口相当于Resource里面的一个接头人,它把Resource里的资源加载、解析和定义整合到一起,便于其他组件使用。

前面介绍了三大核心组件的结构与相互关系,那么,这三大组件是如何让Spring完成诸如IOC和AOP等各种功能的呢?敬请期待下一篇文章!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马