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