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

Spring Framework 4.0 相关计划公布 --- 包括对于 Java SE 8 和 Groovy2 的支持

  • 2013-03-04
  • 本文字数:3376 字

    阅读完需:约 11 分钟

VMware 公司旗下的 SpringSource 团队近日宣布了 Spring Framework 4.0 的相关计划,这是 Spring 框架的下一个升级版本, 新的特性包括了对 Java SE 8,Groovy 2,Java EE 7 部分功能和 WebSockets 的支持。在介绍 Spring Framework 3.2 版本的 webinar 结尾,曾更详细地讨论过这些计划。

计划的新特性和更新的全部清单如下:

  • 基于 Spring 应用对 Java SE 8 的良好支持:

    • 支持 Java SE 8 的新的语言特性,比如 lambda 表达式;API 方面比如 JSR-310 Date 和 Time。
  • 支持使用 Groovy 2 配置和实现 Spring 风格应用:

    • 基于 Groovy 的 bean 定义;Groovy 可以作为整个应用的可选语言。
  • 支持 Java EE 7 中的关键技术:

    • 包括 JMS 2.0,JPA 2.1,Bean Validation 1.1,Servlet 3.1 和 JCache
  • 支持 WebSocket 风格的应用程序架构:

    • 支持符合 JSR-356 的运行时和相关技术
  • 应用程序内部的细粒度事件处理和消息传送:

    • 基于现有的应用程序事件和消息监听器机制构建
  • 裁剪功能和依赖升级:

    • 删除已弃用的功能,将最低依赖提升到 Java 6+ 等

InfoQ 采访了 Spring 框架联合创始人 Juergen Hoeller,以了解计划的更多详情。

InfoQ: 能否给我们介绍下,在 Spring 中, Lambda 表达式会在哪些方面带来帮助;我想 JMS 中的回调编程模型是否就是其中的一种应用场景?

“实际上,所有的 Spring 模板类(如 JmsTemplate,JdbcTemplate,TransactionTemplate)多年来一直使用基于回调的编程风格,这正好是 lambda 表达式发挥所长之处,伴随着那些已经建立的回调接口,更多使用 Java 8 lambda 表达式的原生功能接口可供使用。我们也希望在异步编程模型中能采用强大的 lambda 表达式,如 fork-join 任务和异步 web 请求的处理,针对这些我们在 Spring 3.x 版本中已经完成了大量的基础工作。我们的目标是当用户结合 Spring4 的 API 使用 Java 8 的语言特性时,能得到非常平滑和自然的体验。”

InfoQ: JMS 2.0 将会给 Spring 带来多大的影响?

“我们很高兴看到在 JMS 1.1 发布超过 10 年后 JMS 规范发布了修订版本。然而,新规范的内容除了紧跟时代的步伐外,并没有太多的改变。我们正打算在 JmsTemplate 中支持新的发送选项(延迟传递,异步发送),并允许使用新的 JMSContext Client API 作为替代 Spring 的 JmsTemplate 的可选方案。所以 JMS 2.0 本身不会给架构带来多大的影响;它将从根本上促使我们重新审视 JMS 在各种基于 Spring 架构的应用中的作用。因此,任何在 Spring 中对 JMS 的进一步支持将继续兼容 JMS 1.1。”

InfoQ: 与 JMS 较为相关的这类 WebSocket 应用将通过 JSR-356 得到支持。对此你们的计划是怎么样的?

“我们研究 WebSocket 在业界的使用已有一段时间了,对即将出台的 JSR-356 规范及其相关的技术都十分感兴趣,包括针对主流 Servlet 容器和在最小化服务器配置的嵌入式 HTTP 端点中的部署。我们的目标是以虔诚的态度为 Spring 编程模型提供一个简单直接的扩展,从而暴露(exposing )Websocket 风格的端点(endpoints),理想状态下,将和我们对基于 Spring 应用中消息端点的支持计划同步。我们将保持注重实效,我们很想在 2013 年的基础架构中,能提供让 Spring 使用者感到实用的面向 WebSocket 的功能。”

InfoQ: 计划中明确提到的新的 Java Date 和 Time 的 API。你能否举例说明它们将在哪里得到支持?

“Spring Framework 3.0 中引入了更多使用 JodaTime 类库来对日期进行绑定和渲染的支持。JSR-310 本质上是 JodaTime 的标准化版本,即使它们在设计上有少许不同。我们将优先支持 JSR-310 中的值类型,这可以通过 Spring 的 @DateTimeFormat 和相关的转化功能得到实现,并建议在应用领域模型的核心中使用它们。”

InfoQ: 我留意到你们在 Groovy 上花了不少功夫。你有没有发现 Groovy 2.0 在大规模开发中已成为了 Java 以外的另一种可选项,它在性能上是否足够优秀,能举例说明么?

“这是一个关键的问题,我们也正在探索这个问题的答案。我们在 Spring 4.0 核心框架中对 Groovy 提供了更为强大的支持,从而看到了更多的可能性:基于 Groovy 的 bean 定义 (又称 Grails BeanBuilder),下一代的脚本支持,以及使用 Groovy 2 中的静态编译模式作为基于 Spring 的应用的主要实现语言。当使用静态编译模式时,Groovy 的性能是相当好的,而且今后会变得更好。”

InfoQ: 相比于 Java,你觉得 Groovy 中的哪些特性更适合开发 Spring 应用?

“恩,Groovy 在很多方面跟 Java 是很接近的,并且与 Java 具有天然的互操作性。对于 Spring 来说,最重要的是 Groovy 对 Java 的注解具有强有力的支持,并且支持使用闭包作为 Java API 的方法参数。对于 Java 的使用者来说,Groovy 是十分容易掌握的。除此之外,Groovy 显然有很多很好的小众语言的特性,它们可以让你选择性地或甚至全部采用,但同时又不放弃传统 Java 语言的语义特性。大家可以通过实际查看 Groovy 2.1 的最新特性去体会下。”

InfoQ: 你是否是更认同 Groovy?

“不,绝对不是。我们正全力拥抱 Java ,特别是以 Java 8 的语言风格——但与此同时,我们也对其他语言持开放态度。我们不仅关注 Groovy,也关注 Scala 和其他语言。只不过,对于核心的 Spring 用户来说,Groovy 自有其优势(sweet spot),我们一定会在 Java 8 中喜欢上 Groovy。个人认为,我们对多种语言的研究正在同时进行,这是十分好的事情,而 Spring 终将会从其间受益良多。”

InfoQ: 对于 JCache 的支持,你们的计划是怎么样的?我知道早在 Spring 3.2 中已经对其提供了支持,但在 Jave EE 7 中,你们对 JCache 的改变有什么预期?

“一旦 JCache 的规范最终发布,我们将确定支持所有 JCache 针对 CacheManager 设置而提供选项,包括事务和分布式变体(variants)。我们也打算支持 JCache 中的缓存注解,作为除 Spring 原有缓存注解以外的可选方案,并适当的在 Spring Framework 中做到开箱即用。同时,我们将重新投入到对 EHCache 的原生支持,确保其跟 JCache 得到同一级别的支持,并对最近发布的 EHCache 2.5 以上的新特性进行同步。Spring Framework 4 是一个让我们同步常用第三方类库新特性以及对运行时要求更新版本的好机会。”

InfoQ: 既然你提到最低的依赖环境是 Java EE 6,那么是否意味着,企业如果使用旧版本的应用服务器,如只支持 Jave EE 5 的 WebLogic 10,WebSphere 7,将不能使用这些新的特性?

“Spring Framework 4.0 计划的一个重要部分,是根据最新的 Java SE 和 Jave EE 去定制框架,所以我们的基线将会是 Jave SE 6 及 Jave EE 6 以上。然而,我们也尽量通过使用 Jave EE 6 特性包,比如 Websphere 7 的 IBM JPA 2.0 特性包,或者 WebLogic 10.3.4 的 JPA 2.0 特性包,以对这些 Jave EE 5 的中间件服务器做出妥协,这样就能在它们上面很好地运行 Spring Framework 4.0。从技术上说,这意味着尽管最近 Spring 在 web 方面的支持已经朝 Servlet 3.0 方向强势迈进,但我们将在运行时继续对 Servlet 2.5 保持兼容,。无论如何,Spring 将依然保持着原来的使命,那就是将各种新的编程模型的特性带到已有的运行平台中去,在 Spring 4.0 中依然是这样的。”

InfoQ: 去年看上去,至少是外界看来,对 SpringSource 来说是个多事之秋,比如 Rod 的离开和 VMWare 决定将 SpringSource 分离出来成立一家独立的公司。在业界好像有一种暗示,认为 Spring 框架某种程度上“已经结束”,你怎样回应这种议论?

“Spring 的开源团队依然稳定,熟悉的面孔都依旧各司其职。像我本人,实际上正在庆祝自己作为 Spring Framework 开源项目负责人的 10 周年。 Spring Framework 4.0 正通过建立新一代的框架来庆祝自己的 10 周岁生日,并为未来打造好了一个全新的基础。尽管核心编程模型的改变已不再具有颠覆性,但我们根本没有结束,类似于 Java EE 7 相比 Jave EE 6 那样。在 Spring 4.0 GA 发布后,还将会有其他一系列基于 Spring Framework 4.0 框架的其他项目陆续发布。”

Spring Framework 4.0 的第一个里程碑版本预期将在今年 4 月末发布。而 GA 版本则计划于今年年底发布。

原文链接: Plans for Spring Framework 4.0 Announced - Includes Support for Java SE 8 and Groovy 2


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2013-03-04 20:355429
用户头像

发布了 81 篇内容, 共 24.8 次阅读, 收获喜欢 5 次。

关注

评论

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

Netty入门 -- 什么是Netty?

Bug终结者

Netty 8月月更

开源一夏 | 基于 Serverless一键体验FastAPI

六月的雨在InfoQ

阿里云 开源 Serverless FC 8月月更

openEuler 资源利用率提升之道02:典型应用下的效果

openEuler

开源 数据 cpu 操作系统 openEuler

低代码实现探索(四十七)低的不止前端,还有后端

零道云-混合式低代码平台

经验分享|低成本快节奏搭建企业知识管理系统的方法

Baklib

文档管理系统对于企业来说有哪些作用?

Baklib

培训预告 | 企业应用现代化实用教程——DevOps方法论及最佳实践篇 8月11日上线

York

DevOps 云原生 团队建设 降本增效 应用现代化

开源一夏 | jQuery对于链和捕获的实战研究

恒山其若陋兮

开源 8月月更

运筹帷幄决胜千里,Python3.10原生协程asyncio工业级真实协程异步消费任务调度实践

刘悦的技术博客

Python 协程 Async Python3 协程原理

Go-Excelize API源码阅读(四)——Save()

Regan Yue

Go 开源 源码刨析 8月日更 8月月更

企业进行知识共享的好处有哪些?

Geek_da0866

头脑风暴:打家劫舍2

HelloWorld杰少

算法 LeetCode 动态规划 8月月更

舔狗至高境界,学会这个技巧让你从舔狗升华到海王【Python趣味爬虫】

Geek_ac6fb9

后端

如何让您的wiki内容更高级?

Geek_da0866

【高并发】别闹了,要实现亿级流量下的分布式限流,这些算法你必须掌握!!

冰河

并发编程 多线程 高并发 协程 异步编程

Unity Metaverse(四)、接入环信IM SDK 实现用户登录注册

CoderZ

Unity 登录验证 环信im 8月月更

超人飞来!Flutter 实现满屏的力量感动画!

岛上码农

flutter ios 移动端开发 安卓开发 8月月更

借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05

刘悦的技术博客

入门 教程 Go web 教程分享 入门介绍

Spring Cloud Stream 消息发送

急需上岸的小谢

8月月更

SRv6故障管理

穿过生命散发芬芳

8月月更 SRv6

企业“数字化转型”成功的2个必备条件!

优秀

数字化转型

如何用精益敏捷组合管理,提升研发效能?|ONES 研发管理大师课

万事ONES

LeaRun模型驱动开发框架 重塑企业生产力

力软低代码开发平台

分门别类输入输出,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本数据类型和输入输出EP03

刘悦的技术博客

golang 编程 教程 教程分享 golang 面试

MySQL权限管理

武师叔

8月月更

开源一夏 | RuntimeException 子类

六月的雨在InfoQ

开源 8月月更

Linux下Docker安装部署以及云原生的理解

Geek_acae888666

云原生 Docker 镜像

阿里云数据库PolarDB开源人才培养计划发布!万元好礼等你来拿!

阿里云数据库开源

数据库 阿里云 开源 认证 polarDB

兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04

刘悦的技术博客

golang go doc 教程 教程分享 golang 面试

深度解读 | 关于SBOM最基础元素,你需要知道的(Part I)

安势信息

开源 漏洞 SCA SBOM 最基础元素

什么是Shell?从小白到入门你只差一个它

Albert Edison

Linux centos 运维 shell脚本编程 8月月更

Spring Framework 4.0相关计划公布---包括对于Java SE 8 和Groovy2的支持_语言 & 开发_Charles Humble_InfoQ精选文章