虽然遭遇 Oracle 的挑战,Spring 框架依旧蓬勃发展

  • 张龙

2014 年 1 月 4 日

话题:Oracle语言 & 开发架构

众所周知,Spring 框架在几周前发布了 4.0 版,这也是从 2009 年以来 Spring 发布的首个主要升级版,该版本支持数量广泛的特性,如 HTML5/WebSocket、REST、Java 8、微服务框架等。虽然遭遇了来自于 Oracle 的各种挑战,不过 Spring 这个坚实的开源 Java 开发平台依旧在蓬勃发展,不断形成着自己的生态圈。

Spring 4.0 对很多特性都进行了改进,这包括对 Java 8 标准版的支持(如 Lambda)、一个安全的 REST 栈、HTML5/WebSocket 集成、自定义注解及 Java 7 企业版支持(如 JMS 2.0 等)。时至今日,Spring 4.0 的下载量已经有数百万之多,它提供的依赖注入等功能已经领先于 Java 企业版,并且不会受到流程缓慢的 Java 社区进程的阻碍。现在,从技术上来说,Spring 已经完全可以替代掉由 Oracle(之前的 Sun)所制订的官方 Java 企业版标准。

不过从另一方面来看,Oracle 也在极力说服 Spring 开发者迁移到 Java EE 上,并说其实 Spring 也没有什么特别的优势:

Oracle 建议开发者从流行的 Spring 框架迁移到 Java EE 上,不过 Spring 创始人却认为这些技术可以搭配使用,和谐共处,说 Oracle 的这一举动完全是从财务角度着眼的。

在过去的几个月中,Oracle 一直在各种 Web 会议上动员广大开发者从 Spring 迁移到 Java EE 上。有报道采访了来自于 Luminus Technologies 的 Paul Bakker 与 Bert Ertman,他们建议大家迁移到 Java EE 6 上,并认为现今的 Spring 已经与过去不同了,相比于 Java EE 来说已经没有任何优势可言。此外,Bert Ertman 也曾在去年的上海 JavaOne 大会上接受了 InfoQ 的专访,谈到了如何将 Spring 及遗留应用迁移到 Java EE 平台上。

Luminis 资深软件工程师 Bakker 说到“很多开发者几年前根据 Spring 框架创始人 Rod Johnson 编写的图书认为企业级 Java 开发有很多不足之处,不过时至今日,我们有 Java EE 5 与 Java EE 6,我们有经过完全修订的编程模型,他们非常轻量级,并且基于 POJO。现在是时候让开发者们知道 Java EE 表示的并不是 Java Evil Edition 了,我们完全可以使用它来构建非常棒的企业应用”。

Spring 中用来链接关联对象的依赖注入现在已经出现在了 Java EE 5 中。轻量级、面向方面编程也在 Java 中得以实现。不过 Johnson 在回复问题的一封邮件中消除了 Java EE 与 Spring 之间的冲突,他认为“这都是人们自己搞出来的问题,Spring 与 Java EE 6 完全可以和谐共处”。

Johnson 说到“从本质上来说,Java EE 6 想要干掉 Spring 的论调完全是由商业推动的,Spring 减少了人们对于Oracle WebLogic等传统应用服务器的需求,用户可以选择更加轻量级的基础设施。虽然 Java EE 6 对之前的版本做了一些改进,不过 Spring 依然提供了非常重要的附加值”。

Spring 的应用场景要比 Java EE 6 多不少,这样 Spring 用户就会有更多的选择权。他们可能并不想要使用 Java EE 应用服务器,即便使用 Java EE 亦是如此,他们可能不想使用 Java EE 6,他们可能处于云环境下,这时 Java EE 并不适用,他们可能使用任意一台应用服务器,他们可能想要部署在各种设备上。这时,Spring 的可移植性就是非常有价值的了。

Spring 的生态系统所解决的问题要比 Java EE 多很多,比如说集成、批处理和非关系型数据等。细粒度的安全也得到了很完善的支持,使用 Spring 的组件模型可以提供很多其他的好处。

在 Java EE 领域中,根据 Oracle 的 Arun Gupta 所述,“Oracle 正在寻求通过 Java EE 7 来扩展 EJB 的事务能力以及事务语义,我们在 Java EE 7 中所做的就是抽象出语义,使之具有更加广泛的应用场景。比如说对于 Managed Bean 或是 CDI Beans 等。借助于 CDI Beans,Managed Bean 可以通过 Java 类来实现”。

根据 Java EE 6 指南所述,如果一个顶层类是根据任何 Java EE 技术规范定义的或是满足某些条件,比如说是非静态的内部类,那么这个类就是个 Managed Bean。Java EE 7 的主要特性就在于支持 GlassFish Server 4 应用服务器。

不过,Pivotal 的市场经理 Pieter Humphrey 却认为大家不必为此担心。他认为这个消息仅仅是一面之言而已,并相信 Spring 的流行还将持续下去。现今的 Spring 技术已经涵盖了移动应用开发、NoSQL、大数据以及云计算等领域。

Spring 4.0 中值得关注的一个特性就是 Spring Boot,这是个类似于 Ruby on Rails 的快速应用开发框架。Spring Boot 能够极大减少样板代码的数量,开发者可以根据最少量的样板或是配置相关的代码开始项目的开发。

上个月,Spring 网站有成千上万的访问者,达到了历史上的访问高峰。此外,通过 Maven 构建管理平台下载的 Spring 数量也在持续增长。

有很多读者也对 Spring 的未来及与 Java EE 标准之间的关系发表了自己的评论,分别从项目所采用的技术标准、Spring 的特性及 Java EE 标准的不断演化等方面谈起。

Jim Smith 说到:

Spring Boot 确实太酷了。我实在是搞不懂这个世界上怎么还有人使用臃肿的 JEE 服务器,只是为了部署一个 Restfule Web 服务。

Anil chalil 说到:

我认为对于 JEE 来说,最好的东西就是 CDI 了,它直接能干掉 EJB 模型,Apache Deltaspike 就是围绕着 CDI 生态圈的一个项目。

Frans Thamura 说到:

Spring 不仅是个技术了,而且是个生态圈,他们的模块使之能够形成一个生态圈,JavaEE 能做到这一点么?我觉得够呛。不过对于移植来说,没错,你是可以做到的,但 Spring 并不是私有技术,这是个问题。这就好比是为什么要将程序从 JavaEE 迁移到 Oracle ADF 上一样。

Nicolas 说到:

没错,我知道 Oracle 的这个事情,当时很多人都在说 JEE 已经不再吸引人了。谁在乎呢?JEE 的目标依旧是围绕着传统的应用服务器制订的,演进得非常缓慢,封闭,而且还抄袭其他的创新,至少要比别人晚 5 年时间。下一步应该是在云中兜售 JEE 了,作为获得厂商封闭策略的另一种途径。没错,我知道从理论上来说你可以不再依赖于某个 JEE 厂商,转而使用其他厂商的服务,如果他们二者真的是兼容的。

各位 InfoQ 读者,Spring 现在基本已经成为了构建 Java 应用事实上的标准,而且也从最初的依赖注入和面向方面编程的框架发展成为现如今的一站式应用平台,Spring 现已形成了自己的一个完善的生态圈,提供了对 Web 开发、移动开发、大数据、云计算、集成、批处理、NoSQL 等等一系列的支持。相比于 Spring,传统的 JavaEE 标准的关注度似乎没有以前那么高了,而且发展速度比较缓慢,这其中有很多的因素,毕竟标准的诞生还是需要经过方方面面的考量,一定的滞后性也是必然的。那么根据你的经验,采用 Spring 与采用标准的 JavaEE 各有什么样的利弊呢?从长远来看,哪一种策略才是最优的呢?欢迎写下你的看法与见解,我们一起讨论。

Oracle语言 & 开发架构