Spring框架的设计理念
Spring框架的设计理念
Spring框架中的核心组件只有三个:Core、Context和Beans。
Beans
其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming),Bean在Spring 中才是真正的主角。
Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像没有面向对象编程,Spring中没有Bean也就没有Spring存在的意义。
Spring框架的设计目标:
Spring解决了一个非常关键的问题他可以把对象之间的依赖关系转而用配置文件来管理,也就是他的依赖注入机制。而这个注入关系在一个叫Ioc容器中管理,那Ioc容器中又是什么就是被Bean包裹的对象。Spring正是通过把对象包装在 Bean中而达到对这些对象管理以及一些列额外操作的目的。
Context
我们知道Bean包装的是Object,而Object必然有数据,如何给这些数据提供生存环境就是Context要解决的问题,对Context来说他就是要发现每个Bean之间的关系,为它们建立这种关系并且要维护好 这种关系。所以Context就是一个Bean关系的集合,这个关系集合又叫Ioc容器,一旦建立起这个Ioc容器后Spring就可以为你工作了。
Core
那Core组件又有什么用武之地呢?其实Core就是发现、建立和维护每 个Bean之间的关系所需要的一些列的工具,从这个角度看来,Core这个组件叫Util更能让你理解。
Bean组件
Bean组件在Spring的org.springframework.beans包下。
这个包下的所有类主要解决了三件事:Bean的定义、Bean 的创建以及对Bean的解析。对Spring的使用者来说唯一需要关心的就是Bean的创建,其他两个由Spring在内部帮你完成了,对你来说是透明的。
SpringBean的创建时典型的工厂模式,他的顶级接口是BeanFactory,下图是这个工厂的继承层次关系:
BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和AutowireCapableBeanFactory。
但是从上图中我们可以发现最终的默认实现类是DefaultListableBeanFactory,他实现了所有的接口。
那为何要定义这么多层次的接口呢?
每个接口都有他使用的场合,它主要是为了区分在Spring内部在操作过程中对象的传递和转化过程中,对对象的 数据访问所做的限制。
例如
ListableBeanFactory接口表示这些Bean是可列表的,
而HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。
AutowireCapableBeanFactory接口定义Bean的自动装配规则。
这四个接口共同定义了Bean的集合、Bean之间的关系、以及Bean行为。
Bean的定义主要有BeanDefinition描述,如下图说明了这些类的层次关系:
Bean的定义就是完整的描述了在Spring的配置文件中你定义的节点中所有的信息,包括各种子节点。当Spring成功解析你定义的一个节点后,在Spring的内部他就被转化 成BeanDefinition对象。以后所有的操作都是对这个对象完成的。
Bean的解析过程非常复杂,功能被分的很细,因为这里需要被扩展的地方很多,必须保证有足够的灵活性,以应对可能的变化。
Bean的解析主要就是对Spring配置文件的解析。这个解析过程主要通过
下图中的类完成:
当然还有具体对tag的解析(略)
Context组件
Context在Spring的org.springframework.context包下,他实际上就是给Spring提供一个运行时的环境,用以保存各个对象的状态。
下面看一下这个 环境是如何构建的。
ApplicationContext是Context的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了五个接口,这五个接口主要是扩展了Context的功能。
Context的类结构图:
pplicationContext继承了BeanFactory,这也说明了Spring容器中运行的主体对象是Bean,另外ApplicationContext继承了ResourceLoader接口,使得ApplicationContext可以访 问到任何外部资源,这将在Core中详细说明。