Spring框架:核心容器总结

最近想要深入了解一下spring,所以今天先对spring框架做一个宏观的总结。

Spring框架:

Spring框架:核心容器总结_第1张图片

首先我们看到Spring框架被分成7部分:Core Container(核心容器),Data Access/Integration、WEB、AOP、Instrumentation、Messaging(消息)和Test(测试),这篇博客我们把注意点放到最核心的核心容器上来进行总结。

核心容器

核心容器包括了:Beans、Core、Context、SpEL

1. core和beans模块提供了整个框架最基础的部分,包括了IoC(控制反转)和Dependency Injection(依赖注入)。

2. Context建立在Core和Beans模块提供的基础之上:他提供了框架式访问对象的方式

3. core、beans、context构成了Spring的骨架

4. SpEL:提供了一种强大的用于在运行时操作对象的表达式语言


Spring的设计理念(参考ibm的developerWorks)


前边提到了spring的三个核心组件,而Beans组件则是核心的核心,其实Spring的思想基础就是面向Bean的编程(BOP,Bean Oriented Programming),我们来类比面向对象编程,Bean就的作用之于Spring就好像Object之于面向对象编程一样重要,就好比所有的布景都已经搭好,却没有演员。这就是Bean之于spring的意义。

为何一个小小的Bean的作用这么的强大,这是由于spring的设计目标决定的。我们想一想,为什么Spring如此的流行,我们使用Spring是用他管理对象之间的依赖关系(通过配置文件),这就是经常听到的依赖注入机制。这个注入的关系通过IoC容器进行管理。IoC容器中管理的就是一个个Bean包含的对象。IoC容器可以看成是一个Beans关系的集合

这种设计策略完全类似于 Java 实现的 OOP 设计理念,构建一个数据结构,然后根据这个数据结构设计它的生存环境,并赋给它生命周期,使他在一定规律下不停的运动,在不停运动的过程中完成与其他个体的交互。

如果说 Bean 是一场话剧的演员的话,那么 Context 就是舞台,而 Core 就是道具,它们三个是演话剧最基本的元素。我们知道 Bean 包装的是一个 Object,而 Object 中存在数据,而给这些数据提供生存环境就是 Context 要解决的问题,对于 Context 而言,它要发现每个 Bean,以及 Bean 与Bean 之间的关系,建立和维护好这种关系。所以 Context 就是 Bean 关系的集合,这个关系集合又叫 IOC 容器,而一旦建立起这个容器,Spring就可以进行工作了。那么 Core 是用来做什么的呢?发现、建立和维护 Bean 之间的关系所需要的一系列的工具,它为 Bean 组件和 Context 组件提供了支持。


Bean组件

1. 解决的问题:Bean的定义、Bean的创建、对Bean的解析,对于使用者而言,我们只需要关注Bean的创建,其他两个由Spring内部完成,对用于来说是透明的

2. Bean的创建用到了工厂模式:父类是BeanFactory,最终的实现类是DefaultListableBeanFactory

3. Bean的定义要有BeanDefinition描述:当配置文件中的一个标签被解析后就会在内部转化成一个BeanDefinition对象。以后的操作都是对这个对象完成的
4.bean的解析:主要就是对Spring配置文件的解析,顶级接口是BeanDefintionReader和BeanDefinitionDocumentReader

Context组件

Spring框架:核心容器总结_第2张图片

  1. 他给Spring提供了一个运行时的环境,用以保存各个对象的状态
  2. 他继承了BeanFactory的接口,说明Spring容器的主题对象还是Bean
  3. 他还继承了ResourceLoader接口,是ApplicationContext可以访问到外部任何资源
  4. ApplicationContext必须要完成的事情:
    • 标识一个应用环境
    • 利用BeanFactory创建Bean对象
    • 保存对象关系表
    • 能够捕获各种事件


Core组件

这里写图片描述

  1. 定义了资源的访问方式(这种把所有资源都抽象成一个接口的方式很值得在以后设计中拿来学习)
  2. 我们看到Resource接口封装了各种可能的资源类型,对使用者来说屏蔽了文件类型的不同。Resource接口继承了InputStreamSource接口,这个接口有个GetInputStream方法,返回的是一个InputStream类。所有的资源都可以通过这一个接口来获取,也屏蔽了资源的提供者。我们再看一下最下边的实现类:ResourceLoader接口,所有的资源都通过他来加载,这样就屏蔽了不同资源加载者的差异


下一篇,将总结这三者是如何协同工作的,that’s all!

你可能感兴趣的:(-----,【Spring】,♥,框架知识,Spring学习记录)