1.2 模块

Spring Framework 包含了很多特性,并且组织成 20 个模块。这些模块分为核心容器, 数据访问/整合,Web,AOP(Aspect Oriented Programming,面向切面编程),基础组件和测 试,在下图中来展示这些模块。

image

Spring 框架概要

1.2.1 核心容器

核心容器(4.1 节)包含了核心(Core),Bean 组件(Beans),上下文(Context)和表 达式语言(Expression Language)模块。

核心和 Bean(4.1 节)模块提供了框架部分的基础,包含 IoC 和依赖注入特性。

BeanFactory 是工厂模式的精密实现。它去掉了编程实现单例的需要,并允许你解除配置 信息,以及实际程序逻辑的特定依赖之间的耦合。

上下文(4.14 节)模块构建了由核心和 Bean(4.1 节)模块提供的坚实基础:它可以让 你以框架中的风格来访问对象,这和 JNDI 的注册是相似的。上下文模块集成了来自 Bean 模块的特性,并且加入了对国际化(比如使用资源束)的支持,事件传播,资源加载和 Servlet容器显式创建上下文。上下文模块也支持 Java EE 特性,比如 EJB,JMX 和基本的远程调用。

ApplicationContext 接口是上下文模块的焦点。

表达式语言(第 7 章)模块提供了强大的表达式语言,在运行时查询和操作对象图。这 是 JSP 2.1 规范中的统一表达式语言(Unified EL)的一个扩展。该表达式语言支持设置和获取属性值,属性定义,方法调用,访问数组,集合以及索引的上下文。支持逻辑和数字运算, 命名变量。还支持从 Spring 的 IoC 容器中以名称来获取对象。它也支持 list 的投影和选择操作,还有普通的 list 聚集。

1.2.2 数据访问/整合

数据访问/整合层由 JDBC,ORM,OXM,JMS 和事务模块组成。

JDBC(13.1 节)模块提供了 JDBC 抽象层,它移除了冗长的 JDBC 编码,但解析了数据库 提供商定义的特定错误代码。

ORM(14.1 节)模块提供了对流行的对象-实体映射 API 的整合层,包含 JPA(14.5 节),JDO(14.4 节),Hibernate(14.3 节)和 iBatis(14.6 节)。使用 ORM 包你就可以使用全部的O/R-映射框架并联合其它 Spring 提供的特性,比如之前所提到的简单声明式的事务管理特性。

OXM(第 15 章)模块提供了支持 JAXB,Castor,XMLBeans,JiBX,以及 Xstream 对对象/XML 映射实现的抽象层。

Java 消息服务(JMS,第 22 章)模块包含生成和处理消息的特性。

事务(第 11 章)模块支持对实现特定接口的类和所有 POJO(普通 Java 对象)的编程 式和声明式的事务管理。

1.2.3 Web

Web 层由 Web,Web-Servlet,Web-Struts 和 Web-Portlet 模块组成。

Spring 的 Web 模块提供了基本的面向 Web 整合的特性,比如文件上传功能,IoC 容器 的初始化使用了 Servlet 的监听器和变形的 Web 应用上下文。它还包含了和 Web 相关的 Spring远程调用支持的部分。

Web-Servlet 模块包含了 Spring 对 Web 应用的模型-视图-控制器(MVC,16.1 节)模式 的实现。Spring 的 MVC 框架提供了一个在领域模型代码和 Web 表单之间的整洁分离,并且 整合了其它所有 Spring 框架的特性。

Web-Struts 模块包含了使用 Spring 应用程序整合经典的 Strtus Web 层的支持类。要注意 这个支持从 Spring 3.0 开始就废弃了。那么可以考虑迁移应用程序到 Struts 2.0 和 Spring 的整 合或者是单纯的 Spring MVC 方案。

Web-Portlet 模块提供用于 portlet 环境和 Web-Servlet 模块功能镜像的 MVC 实现。

1.2.4 AOP 和基础组件

Spring 的 AOP(8.1 节)模块提供了 AOP 联盟-允许的的面向切面的编程实现,允许你定 义如方法-拦截器和横切点来整洁地解耦应该被分离的功能实现代码。使用源代码级的元数 据功能,也可以混合行为信息到代码中,这个方式和.NET 的属性很相似。

分离的 Aspects 模块提供对 AspectJ 的整合。

基础组件模块提供了对类的基础支持,还有类加载器的实现来用于特定的应用服务器。

1.2.5 测试

测试模块支持 Spring 组件,Junit 或 Test NG 的测试。它提供了 Spring 应用上下文的一致 加载并缓存这些上下文内容。它也提供 mock 对象,你可以用来孤立地测试代码。