那些你该了解的 Spring 子项目

  • 丁雪丰

2013 年 1 月 18 日

话题:语言 & 开发架构

去年年底,Spring Framework 正式发布了 3.2GA 版本,距离 3.1 版的发布时间正好相隔一年,而距离最早的Sprig Framework 1.0 Final 发布也已 8 年有余。现在的 Spring 几乎成了 Java 项目中的“标配”,被运用于大大小小的系统之中。它出众的模块化特性让人们可以仅仅使用需要的部分,所以很多开发者往往只了解 Spring 核心框架中的 IoC 和 AOP,有的还用了数据访问和 MVC 部分,而不关心其他内容,更不用提它的子项目了。

在首次 SpringOne 中国大会上,几位 Spring 开发团队的成员表示 Spring 核心框架的发布之所以间隔时间越来越大,正是因为越来越多的功能被放到了子项目中独立开发,所以这些子项目才变得愈发重要起来。比如,现在日益流行起来的 Spring Batch、Spring Integration 和 Spring Data,正如Mark Pollack 博士在接受采访时所表示的那样:

我们一直在持续追踪 Maven 上的下载统计信息,这些项目的下载量都是呈指数级增长的。我最近没有关注,但我认为,Spring Integration 和 Spring Batch 的流行程度比较接近。Spring Data JPA 是最流行的项目,虽然 NoSQL 的讨论很热烈,但企业开发者还是在使用关系型数据库,所以对这个结果我们并未感到太吃惊。我们的 MongoDB 支持、Redis 支持最近也越来越流行了,还有 Neo4j,它们的成长曲线很漂亮,终会和 Spring Integration 和 Spring Batch 一样流行的。

虽然我们无法了解详细的下载统计数据,不过通过 Google Trends,还是可以对这三个子项目关注度的发展趋势有所了解:

Spring Data

Spring Framework 中的数据访问模块对 JDBC 及 ORM 提供了很好的支持,随着 NoSQL 和 BigData 的兴起,出现了越来越多的新技术,比如非关系型数据库、MapReduce 框架,Spring Data正是为了让 Spring 开发者能更方便地使用这些新技术而诞生的“大”项目——它由一系列小的项目组成,分别为不同的技术提供支持,例如 Spring Data JPA、Sprng Data Hadoop、Spring Data MongoDB、Spring Data Redis 等等。通过 Spring Data,开发者可以用 Spring 提供的相对一致的方式来访问位于不同类型的数据存储中的数据

除了新技术,Spring Data 还为传统的关系型数据库提供了很多额外的支持,让开发者能够更好地利用关系型数据库,比如对 Oracle RAC 的支持。

Spring Batch

Spring Batch是一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发者方便地开发出强壮、高效的批处理应用程序。瑞友科技 IT 应用研究院副院长池建强是这样介绍 Spring Batch 的

Spring Batch 是一款优秀的、开源的大数据量并行处理框架。通过 Spring Batch 可以构建出轻量级的、健壮的并⾏处理应用, 支 持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接口管理和任务管理。

Spring Batch 对批处理任务进行了一定的抽象,它的架构可以大致分为三层,自上而下分别是业务逻辑层、批处理执行环境层和基础设施层。构建于 Spring Framework 之上,Spring Batch 可以很好地利用 Spring 带来的各种便利,同时也为开发者提供了相对熟悉的开发体验。

很多人在了解了 Spring Batch 的流程控制和定义部分时,都会将其和工作流引擎混淆在一起。针对这个问题,Spring Batch 的开发者 Josh Long(他同时也是开源工作流引擎Activiti的贡献者)做出了这样的解释:

Spring Batch 更多地关注于大规模的批处理任务,例如,它提供了很多方法来读取大型的文件(比如 1GB 的 CSV、XML 文件),在数据库中加载或更新几万甚至几十万条记录。试想,一个对大规模批处理并不熟悉的开发者很可能会直接 select 出所有记录,以至于拖垮整个系统,而使用了 Spring Batch,框架会帮助他每次捞取一部分记录进行分页,在更新时分批进行提交……

在处理大任务时,还可以根据需要,将任务拆成多个部分分配到不同的服务器上进行处理,随后再整合结果。其可扩展性和灵活性由此就已可见一斑了。

Spring Integration

在企业软件开发过程中,经常会遇到需要与外部系统集成的情况,这时可能会使用 EJB、RMI、JMS 等各种技术,也许你会引入 ESB。如果你在开发时用了 Spring Framework,那么不妨考虑Spring Integration——它为 Spring 编程模型提供了一个支持企业集成模式(Enterprise Integration Patterns)的扩展,在应用程序中提供轻量级的消息机制,可以通过声明式的适配器与外部系统进行集成。

Spring Integraton 中有几个基本的概念——Message(带有元数据的 Java 对象)、Channel(传递消息的管道)和 Message Endpoint(消息的处理端)。在处理端可以对消息进行转换、路由、过滤、拆分、聚合等操作;更重要的是可以使用 Channel Adapter,这是应用程序与外界交互的地方,输入是 Inbound、输出则是 Outbound,可选的连接类型有很多,比如 AMQP、JDBC、Web Services、FTP、JMS、XMPP、多种 NoSQL 数据库等等。只需通过简单的配置文件就能将所有这些东西串联在一起,实现复杂的集成工作。

Spring 还有很多其他子项目,比如:

  • Spring Security(早期也叫 Acegi),是较为成熟的子项目之一,是一款可定制化的身份验证和访问控制框架
  • Spring Roo,快速应用程序开发工具,可以在短时间内方便地生成应用程序
  • Spring Mobile,对 Spring MVC 的扩展,旨在简化移动 Web 应用的开发
  • Spring for Android,用于简化 Android 原生应用程序开发的 Spring 扩展

大家可以访问 SpringSource 的项目页面或者它们的GitHub了解更多信息。您使用过哪些 Spring 子项目呢,不妨也和大家分享一下吧。

语言 & 开发架构