Spring总共有十几个组件,但是真正的核心组件只有只有几个。下图是我画的Spring框架的总体架构图,画的不好将就看:
从图中可以看出,在Spring框架中的核心组件只有三个:Core,Context和Bean。
他们构建起了整个Spring的骨骼架构,没有它们就不可能有AOP,Web等上层的特性功能。
Spring的设计理念
前面介绍了Spring的三个核心组件,如果再在它们三个中选出核心的话,那就非Bean组件莫属了。为什么这样说,其实Spring就是面向Bean的编程,Bean在Spring中才是真正的主角。
Bean在Spring中的作用就像Object对OOP的意义一样,没有对象的概念就没有面对对象编程,Spring中没有Bean也就没有Spring存在的意义。Spring为何如此流行,我们用Spring的原因是什么,想想你会发现原来Spring解决了一个非常关键的问题,Spring可以把对象之间的依赖关系转而用配置文件来管理,也就是依赖注入机制。而这个注入关系在一个叫IOC容器中管理,IOC容器就是被Bean包裹的对象。Spring正是通过把对象包装在Bean中而达到对这些对象的管理以及一些额外操作的目的。
这种设计策略完全类似于Java实现OOP的设计理念。
核心组件如何协同工作
Bean是Spring中的关键因素,那Context和Core又有何作用呢?如果把Bean比作一场演出中的演员的话,那Context就是这场演出的舞台背景,而Core就应该是演出的道具了。只有他们在一起才能具备演出一场好戏的最基本条件。当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目就是 Spring 能提供的特色功能了。
我们知道 Bean 包装的是 Object,而 Object 必然有数据,如何给这些数据提供生存环境就是 Context 要解决的问题,对 Context 来说他就是要发现每个 Bean 之间的关系,为它们建立这种关系并且要维护好这种关系。所以 Context 就是一个 Bean 关系的集合,这个关系集合又叫 Ioc 容器,一旦建立起这个 Ioc 容器后 Spring 就可以为你工作了。那 Core 组件又有什么用武之地呢?其实 Core 就是发现、建立和维护每个 Bean 之间的关系所需要的一些列的工具,从这个角度看来,Core 这个组件叫 Util 更能让你理解。
他们之间的关系可以用下图来表示: