QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2014-01-04
  • 本文字数:2686 字

    阅读完需:约 9 分钟

众所周知, 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 各有什么样的利弊呢?从长远来看,哪一种策略才是最优的呢?欢迎写下你的看法与见解,我们一起讨论。

2014-01-04 21:574041
用户头像

发布了 88 篇内容, 共 263.9 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

昇腾CANN论文上榜CVPR,全景图像生成算法交互性再增强!

华为云开发者联盟

CVPR CANN 图像生成 昇腾AI处理器 图像布局

presto是如何保证作业内存不会发生冲突和溢出

华为云开发者联盟

内存 presto 内存计算引擎 System Pool general Pool

使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

汪子熙

自动化 前端开发 websocket 程序员进阶 3月月更

如何在新公司快速落地

Hockor

Redis:在windows环境安装Redis

喀拉峻

redis

HertzBeat赫兹节拍 v1.0.beta.6 发布,Linux监控来啦

TanCloud探云

开源 APM 监控 告警

Jetpack Compose之 在Compose中使用Navigation导航

黄林晴

android Compose JetPack

5G 和 Wi-Fi 市场与技术的一些思考系列之二

李伟-晨泳

☕️从Java8到Java17的新特性(一):Java8 的新特性

看山

Java java8

Git 如何回退代码

秋天

多场景推进 服务网格在联通的落地实践(下)

百度大脑

RocketMQ的tag还有这个“坑”!

中间件兴趣圈

RocketMQ tag 消息过滤

最好的 6 个 React Table 组件详细亲测推荐

蒋川

React

WebAssembly技术_JS调用C函数示例_传递参数、方法导出

DS小龙哥

webassembly 3月月更

从 SVN 迁移到极狐GitLab

极狐GitLab

svn 迁移 极狐GitLab

计算机编码规则之:Base64编码

程序那些事

Java base64 nio 程序那些事 3月月更

Redis集群架构剖析(3):集群处理redis-cli指令

非晓为骁

redis 架构 分布式 redis cluster

电脑就是我的安全感|ONES 人物

万事ONES

招聘 软件工程师

春分耕种时,AI“现身”田间地头

百度大脑

Python迎来31岁生日,蝉联年度编程语言排行榜冠军

Python猫

Python

Kubernetes API规范:为optional的字段使用pointer

工程师薛昭君

API Kubernetes 集群

深入浅出 Vue3 核心知识点

百瓶技术

Vue 前端 VUE 3.0 源码 vue3.0

科幻变现实:喷下即疗愈,生物3D打印绘就生命密码图

脑极体

聊聊 C 语言和 ABAP 这两门编程语言的关系

汪子熙

c++ 编程语言 C语言 abap 3月月更

网络安全:绕过MSF的一次渗透测试

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

如何消除代码山中那一大坨参数列表

华为云开发者联盟

代码 软件设计 参数 全局变量 参数列表

一周热点回顾|虎符交易所上线多链合一;俄央行称加强监控加密资产等P2P交易

区块链前沿News

区块链 虎符交易所

743 网络延迟时间

好吃不贵

一文搞定 Flutter 底部弹窗实现

岛上码农

flutter 跨平台 ios开发 Android开发 3月月更

小程序电商微服务设计

唐尤华

架构实战营

《软件开发的201个原则》思考:4. 高质量软件是可以实现的

非晓为骁

个人成长 软件工程 软件开发

虽然遭遇Oracle的挑战,Spring框架依旧蓬勃发展_Oracle_张龙_InfoQ精选文章