写点什么

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

  • 2017-10-30
  • 本文字数:1793 字

    阅读完需:约 6 分钟

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:005190

评论

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

企评家企业大数据平台助力政府智能监管

企评家

Robot OS系统架构设计

轻口味

android 架构 Robot 4月月更

初探 Lambda Powertools TypeScript

亚马逊云科技 (Amazon Web Services)

typescript Serverless Lambda AWS

企评家为政府打造决策支撑平台

企评家

CSV Column Extract列提取

入门小站

工具

读《Software Engineering at Google》(12)

术子米德

架构师成长笔记

k8s client-go源码分析 informer源码分析(1)-概要分析

良凯尔

Kubernetes 容器 云原生 Client-go

略谈企业信息化的规律

秋去冬来春未远

信息化规律

读《Software Engineering at Google》(11)

术子米德

架构师成长笔记

[Day22]-[链表]相交链表

方勇(gopher)

链表 LeetCode 算法和数据结构

解决方案架构师的小锦囊 - 架构图的 5 种类型

亚马逊云科技 (Amazon Web Services)

技术 职业 亚马逊云科技

redis优化系列(二)Redis主从原理、主从常用配置

乌龟哥哥

4月月更

采用百度飞桨EasyDL完成指定目标识别

DS小龙哥

4月月更

为什么我们需要做企业成长性评价分析?

企评家

机器学习算法:关联规则分析

Peter

Python 机器学习 算法

一个快速追踪密切接触者的开源脚本方案

冯骐

Python 数据分析 流调 密接 新冠疫情

LabVIEW控制电脑关机、休眠、注销和重启

不脱发的程序猿

LabVIEW LabVIEW控制电脑

Pandas+Numpy+Sklearn随机取数

Peter

Python pandas

读《Software Engineering at Google》(13)

术子米德

架构师成长笔记

读《Software Engineering at Google》(14)

术子米德

架构师成长笔记

C++内存池的简单原理及实现(纯代码解析)

简说Linux内核

Linux Linux服务器开发 Linux内核 嵌入式开发

Linux内核应该怎么学习?给大家推荐五本书籍

简说Linux内核

Linux Linux内核 驱动开发 嵌入式开发

Flutter 一文搞定图片选择和图片上传

岛上码农

flutter ios开发 安卓开发 4月月更 跨平台开发

“亿”点点技术情怀

不脱发的程序猿

程序员 程序人生 技术情怀

我是如何用 Amazon Serverless 创建一个门铃的

亚马逊云科技 (Amazon Web Services)

Serverless Lambda AWS showdev

在docker上编译openjdk8

程序员欣宸

Java JVM 4月月更

在线YAML转XML工具

入门小站

工具

未来可期,PlatoFarm的生态通证登录Bitmart等全球四大平台

BlockChain先知

GDB调试程序的核心技术-ptrace系统调用与使用示例

简说Linux内核

内存管理 Linux内核 进程管理 嵌入式开发 设备驱动

Pandas索引的操作

Peter

Python pandas

LabVIEW实现应用程序停止或退出

不脱发的程序猿

LabVIEW

Spring框架5.0版本发布相关的技术访谈_Java_Amit K Gupta_InfoQ精选文章