2020 Google开发者大会重磅开幕 了解详情

Spring框架5.0版本发布相关的技术访谈

2017 年 10 月 30 日

Spring 框架 5.0 版本在 2017 年 9 月 28 日发布,在特性中包含了一个新的反应式 Web 框架。 Pivotal 的产品市场主管 Pieter Humphrey 将这个版本描述为该项目自 2004 年诞生以来最重要的发布版本。

在这个发布版本中,Spring 5.0 的整个代码库都是基于 Java 8 源码级别的。Spring 5.0 完全兼容 JDK 9 进行开发和部署。

Spring 5.0 的反应式 Web 框架名为 Spring WebFlux ,它构建在 Reactor 3.1 项目之上,同时支持注解和函数式风格编程。InfoQ 与 Pivotal 的高级工程师 Rossen Stoyanchev 进行了交流,讨论了他对 Spring 5.0 强调反应式编程的看法。

Stoyanchev:通过 Java 8 的 CompletableFuture,Java 开发人员已经熟悉了采用连续(continuation)风格的 API 来组合异步逻辑的好处。在最近几年间,我们看到出现了一些库用于组合异步逻辑,比如 RxJava 和 Reactor,它们提供了与 CompletableFuture 类似的收益,但它们处理的是流式值并且支持回压(backpressure,在 Reactive Streams 规范中所定义的)。

Spring 框架 5.0 版本借助一个 Web 框架,能够让应用拥抱这种异步编程模型,这个 Web 框架本身的核心协议是完全异步的,内部采用了非阻塞的 I/O,在异步运行时环境上支持 Reactive Streams 回压功能,这些运行时环境包括 Netty、Undertow 以及像 Tomcat 和 Jetty 这样的 Servlet 容器(基于 Servlet 3.1 非阻塞 I/O)。这种方式所带来的最重要的好处就是能够结合事件轮询风格的执行模型来组合异步逻辑,这样就能以更少的硬件资源处理更多的并发请求,在高负载场景下,它的作用会更加明显。

Stoyanchev 说 Spring 5.0 引入的变化对希望升级的已有应用不会带来影响,因为新功能是与 Spring MVC 并存的。

在大多数的应用中,要么导入 spring-webmvc(Servlet 技术栈),要么导入 spring-webflux(Reactive 技术栈),已有的应用可以很容易地升级到 Spring 5 版本的 spring-webmvc。

按照 Stoyanchev 的说法,Spring 5.0 努力在 Spring MVC 和 Spring WebFlux 之间提供一致的体验,开发人员可以在两者之间做出选择。这两个 Web 框架通过灵活的控制器方法签名,支持相同的注解编程模型。除此之外,Spring WebFlux 还提供了可选的、函数式的 Web 端点编程模型,将其与 Java 8 lambdas 和内置的 Kotlin 扩展协同使用是很有吸引力的。

在 Spring 框架 5.0 中,我们实际上对 Spring MVC 进行了扩展,使其支持反应式的返回值,这样的话,就允许 Spring MVC 控制器使用反应式 WebClient 和其他的反应式库,比如反应式数据 repositories,在这个过程中,依然能够在任意的 Servlet 3.1+ 容器中基于 Servlet 的 Web 端点技术进行操作。

InfoQ 还咨询了 Stoyanchev,如果希望采用 Spring 5.0 的反应式编程模型的话,开发人员有什么需要预先注意的地方。

开发人员应该了解从编写命令式风格的逻辑转移到使用声明式、异步的 API 时,有一个很大的学习曲线。另外,异步和非阻塞的代码也更难调试,因为调用栈不再是唯一的。如果你刚刚开始接触的话,建议从小范围开始,留出足够的时间去学习和适应。要慎重选择最适合,并且能够从非阻塞并发中获益最多的应用。在决定开始之前,要衡量和证明性能方面所能带来的收益。另外需要记住的是,有些地方是很容易上手的,比如在已有的 Spring MVC 应用中使用反应式 WebClient。

InfoQ 还与 Spring 框架项目的领导者 Juergen Hoeller 进行了交流,了解了他对 Spring 5.0 的想法。

Hoeller:我们以 Java 8+ 作为基线,这样能够为整个框架带来重要的 API 改善和众多的内部优化。同时,Spring 框架 5.0 能够完全支持 JDK 9,它能够同时支持 classpath 以及模块路径。

核心容器为 Java 8 和 Kotlin 提供了函数式 bean 注册的机制。

Hoeller 补充说,Spring 5.0 还为常见的 Spring API 提供了 Kotlin 扩展,比如 JdbcTemplate 和 RestTemplate,并且还支持对 Kotlin 数据类(data class)进行数据绑定。

Hoeller 总结了 Spring 5.0 其他重要的特性:

Spring 框架 5.0 在运行时支持 Java EE 8 API 级别,比如支持将 Servlet 4.0 的 PushBuilder 注入到 Spring MVC 处理器方法中、用于 JSON 转换的标准 JSON Binding API(作为 Jackson 和 Gson 的替代方案)、JPA 2.2 持久化技术以及注解驱动校验的 Bean Validation 2.0。综上所述,我们的基线依然是 Java EE 7+ 级别,依然支持所有的 Servlet 3.1、JPA 2.1 提供商等等。

查看英文原文 Spring Framework 5.0 Released

2017 年 10 月 30 日 19:00 4231

评论

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

数据库选型入门必读:如何在眼花缭乱的产品中挑出最适合业务的?

华为云开发者社区

数据库 数据库选择 关系型

区块链掀起全民创业热潮!数字资产是未来全球最具前景和价值的!

CECBC区块链专委会

区块链 数字货币

第三课代码重构课后作业

Geek_michael

「架构师训练营第 1 期」

设计模式--正确学习姿势

张荣召

架构训练营第二周作业

Geek_ce484f

架构师训练营第 1 期

关于 UML 类图

西贝

UML 图表

甲方日常 25

大橘子

生活 随笔杂谈 日常

第三周 作业1

Yangjing

架构师训练营第一期

全文!马云对数字时代全球化的全新解读

CECBC区块链专委会

全球化 数字时代

不是我不小心

escray

Java ruby ruby-on-rails 面经 101次面试

设计模式-单例模式

张荣召

架构训练营第二周作业

Geek_ce484f

架构师训练营第 1 期

设计模式--组合模式/装饰模式

张荣召

Composite Pattern Decorator Pattern

代码重构 - 课后作业

Nick~毓

java安全编码指南之:死锁dead lock

程序那些事

java安全编码 java安全 java安全编码指南

架构师训练营 - 作业 - 第二周

Max2@12

技术解读丨目标检测之RepPoints系列算法

华为云开发者社区

算法 神经 目标检查

一周信创舆情观察(9.21~9.27)

统小信uos

一个草根的日常杂碎(9月30日)

刘新吾

随笔杂谈 生活记录 社会百态

国内上市进程或将提速!百度宣布小度科技独立融资

脑极体

中秋佳节,程序员教你AI三步成诗,秒变“李白”

华为云开发者社区

AI 中秋

架构师训练营 1 期第 3 周:代码重构 - 作业

piercebn

架构师训练营第 1 期

剖析Java15新语法特性

高翔龙

Java 架构 java15 Java 分布式 java15新特性

从三个产业侧影,打开万物智能的应用之匙

脑极体

设计模式--模板模式/策略模式

张荣召

Template Pattern Strategy Pattern

【获奖名单】赢千元数码大奖!竟然如此简单!

InfoQ写作平台

美食 活动 摄影 活动专区

开源=免费?

Philips

开源 开源项目 开源代码 开源社区

上手深度学习之前,我们先聊聊“数学”

华为云开发者社区

神经网络 学习 数学

在vue2中使用ts

正经工程师

typescript vue.js

软件架构(2)-框架设计

Zeke

架构师训练营第 1 期

重塑产业+价值共识,区块链助力供应链金融数字化

CECBC区块链专委会

区块链 供应链物链

Spring框架5.0版本发布相关的技术访谈-InfoQ