在拉斯维加斯举行的SpringOne Platform大会的第二日,Pivotal 公司首席工程师兼Spring框架项目负责人Juergen Hoeller给与会者分享了Spring框架的最新发展蓝图。
Spring 4.0 Pivotal框架缩短了迭代期,大约会在每9-10个月进行一次主要功能发布。 4.3版本 已经在今年七月发布,预计该版本将成为Spring 4.x产品线的最终功能版本。该版本中进行了对于核心依赖注入框架本身的进一步改进,以及对于Spring MVC和网络层的改进。由于系统需求没有变更,因此该版本与JDK 6、7以及8都相互兼容,并可以运行在任何Servlet 2.5+容器上。
Spring框架5.0版本作为第一个里程碑版本已经在今年的七月发布,候选版本预期将在十二月左右发布。GA版本也可能会在2017年第一季度发布。Spring 5.0主要基准有重大更新,将支持JDK 8+、Servlet 3.1+、JMS 2.0+、JPA 2.1+和JUnit 5。
新版本发布的选取框功能将直接支持响应式网络应用程序,它来源于 Reactor项目 曾经实践的与 RxJava 的密切合作开发。
响应式编程是非阻塞、事件驱动的应用程序,可处理一小部分的线程, 背压 这种反馈机制旨在保证生产者不会完全压盖过消费者。9和Spring 5采纳的 Reactive Streams规范 可以确保不同供应者能在各层以及各库之间相互通信。
在Spring 5中,新的 Spring Web Reactive 网络框架取代了原有的Spring Web MVC。Spring Web Reactive支持@Controller编程模型,同时提供响应式的网络客户端。它的使用感觉与Spring MVC非常相似,但是添加了搭建在Reactive Streams和Reactor上的非阻塞语义机制。它们将消费请求,写入响应,举个例子来说,使用非阻塞响应式API可以让你使用背压写入HttpSocket。
下面的示例代码摘自一篇 博客文章 ,介绍了Spring 5.0 M1的响应式编程,它示例了一个控制器使用完全的非阻塞和响应式方式从远端服务器获取并传送数据。
@GetMapping("/accounts/{id}/alerts") public Flux getAccountAlerts(@PathVariable Long id) { return this.repository.getAccount(id) .flatMap(account -> this.webClient .perform(get("/alerts/{key}", account.getKey())) .extract(bodyStream(Alert.class))); }
除了响应式支持,Spring核心容器团队还将关注启动性能,尤其是在可能的环境中使用多个线程引导。在演说中,Hoeller解释说:
当引导应用程序的时候,核心容器会起到很大的作用。在某些程度上来说,这已经是非常优化的了,但是我们也仅仅是尽最大努力给出运行时的信息。提供的信息通常只是一个JAR文件,基本上是类路径。
在5.0中我们将深入研究额外的设备使用。如果构建过程中将创建一个专门的索引,让我们可以提前了解特定的注释组件而不必完全扫描类路径?并发的引导呢?在环境中的某些让我们使用额外的引导线程的启动过程能并发运行吗?
5.0版本中的核心容器的Java 8将彻底改革,启用核心框架中的一些APIs,例如开始使用 java.util.function 类型。对于编程端点管理来说,也给出注释处理方法、lambda表达式的HTTP路由和处理的一些其他选择。框架也将支持客户端和服务器端的HTTP/2。
Spring框架5.0版本预计将与JDK9一起发布,到那时Spring framework 5.0 M1将使用现有的JDK 9快照的至少是类路径模式正确运行。然而第一个里程碑并不支持这个新的“Jigsaw”模块化系统,对它的支持大约将在随后的里程碑版本中发布。
Hoeller在大会上透露,鉴于JDK 9.0发布的进一步推迟,所以在团队认为时机合适的时候就会先发布Spring 5.0,因此Spring框架5.1版本才会完全与JDK 9兼容。Spring 5.1预计会在2017年底发布。
查看英文原文: Updated Spring 5.0 Roadmap and Reactive Story Presented at SpringOne