Spring Framework 概述

什么是 Spring

Spring 是于2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作 Expert One-On-One J2EE Development and Design 中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。
在实际开发中,通常服务器端采用三层体系架构,分别为表现层(web)、业务逻辑层(service)、持久层(dao)。
Spring 是分层的 Java SE/EE full-stack 轻量级开源框架,以 IoC(Inverse of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,使用基本的 JavaBean 完成以前只可能由 EJB 完成的工作,取代了 EJB 臃肿和低效的开发模式。
Spring 具有简单、可测试和松耦合等特点,不仅可以用于服务器端的开发,也可以应用于任何 Java 应用的开发中。Spring 框架的主要优点具体如下:

  1. 方便解耦,简化开发
    Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
  2. 方便集成各种优秀框架
    Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
  3. 降低 Java EE API 的使用难度
    Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
  4. 方便程序的测试
    Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
  5. AOP 编程的支持
    Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
  6. 声明式事务的支持
    只需要通过配置就可以完成对事务的管理,而无须手动编程。

Spring 的体系结构

Spring 框架采用分层架构,根据不同的功能被划分成了多个模块,大体可分为 Data Access/Integration、Web、AOP、Aspects、Messaging、Instrumentation、Core Container 和 Test,如下图所示。
Spring Framework 概述
图中包含了 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

Core Container(核心容器)

核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(Spring 表达式语言)模块组成。
spring-core 和 spring-beans 模块提供 framework 的基本部分,包括 IoC 和依赖注入。 BeanFactory 是工厂模式的复杂实现。它消除了对程序化单例的需求,并允许您从实际程序逻辑中分离配置项和依赖项。
spring-context 模块构建在 spring-core 和 spring-beans 模块提供的坚实基础之上。 spring-context 模块从 spring-beans 模块继承其特性并添加对国际化(使用,例如,资源包),事件传播,资源加载以及透明的上下文创建的支持,例如,Servlet 容器。spring-context 模块还支持 Java EE 特性,例如 EJB,JMX 和基本远程处理。
ApplicationContext 接口是 spring-context 模块的焦点。 spring-context-support 支持将第三方类库集成到 Spring application context 中,用于缓存(EhCache,Guava,JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模板引擎(FreeMarker,JasperReports,Velocity)。
spring-expression 模块提供了一个强大的表达语言,用于在运行时查询和操作对象。它是 JSP 2.1 规范中指定的统一表达式语言(统一 EL)的扩展。该语言支持设置和获取 property 值,property 赋值,方法调用,访问数组,集合和索引器的内容,逻辑和算术操作符,命名变量以及 Spring 的 IoC 容器中的名称检索对象。

AOP and Instrumentation

spring-aop 模块提供 AOP 符合面向切面编程实现,允许您为样例定义方法拦截器和切入点,以干净地解耦实现应该分离的功能的代码。使用源码级别的元数据功能,您还可以以类似于 .NET 属性的方式将行为信息合并到代码中。
单独的 spring-aspects 模块提供与 AspectJ 的集成。
spring-instrument 模块提供类检测支持和类加载器实现以在某些应用服务器中使用。 spring-instrument-tomcat 模块包含 Spring 的 Tomcat 检测代理。

Messaging(消息)

Spring Framework 4 包含一个 spring-messaging 模块,其中包含来自 Spring 集成项目的关键抽象,例如 Message,MessageChannel,MessageHandler 等,以作为基于消息应用的基础。该模块还包括一组注解,用于将消息映射到方法,类似于基于 Spring MVC 注解的编程。

Data Access/Integration(数据访问/集成)

Data Access/Integration 层由 JDBC,ORM,OXM,JMS 和 Transaction 模块组成。

  • spring-jdbc 提供了 JDBC 抽象层,无需进行繁琐的 JDBC 编码和解析数据库供应商特定错误代码。
  • spring-tx 模块支持程序性和声明式事务管理,用于实现特殊接口的类和所有 POJO(Plain Old Java Objects)。
  • spring-orm 模块为流行的对象关系映射 API 的集成,包括JPA,JDO 和 Hibernate。使用 spring-orm 模块,您可以将所有这些 O/R-mapping 框架与 Spring 提供的所有其他特性结合使用,例如前面提到的简单声明事务管理。
  • spring-oxm 模块提供了一个支持 Object/XML 映射的抽象层实现,例如 JAXB,Castor,XMLBeans,JiBX 和 XStream。
  • spring-jms 模块(Java 消息传递服务)包含用于生产和消费消息的功能。从 Spring Framework 4.1 开始,它为 spring-messaging 模块提供了集成。

Web

Web 层由 spring-web,spring-webmvc,spring-websocket 和 spring-webmvc-portlet 模块组成。

  • spring-web 模块提供面向 web 的基本功能,例如 multipart 文件上载功能和使用 Servlet 监听器和面向 web 的应用上下文初始化 IoC 容器。它还包含 HTTP 客户端和 Spring 远程支持的 web 相关部分。
  • spring-webmvc 模块包含 Spring 的模型视图控制(MVC)和 REST Web 服务的实现。 Spring 的 MVC 框架可以使领域模型代码和 web 表单完全地分离,且可以与 Spring 框架的其它所有功能进行集成。
  • spring-webmvc-portlet 模块提供了用于 Portlet 环境的 MVC 实现,并反映了 spring-webmvc 模块的功能。

Test(测试)

spring-test 模块使用 JUnit 或 TestNG 支持单元测试和整合测试 Spring 组件。它提供了加载的 Spring ApplicationContext 和高速缓存这些上下文。它还提供 mock 对象,您可以使用它来隔离测试您的代码。