Spring Framework 5中的新功能和增强功能(文末送书)

作者简介

柳伟卫(英文名Way Lau),关注编程、系统架构、性能优化。在大型IT公司担任过项目经理、架构师、高级开发顾问等职位,具有多年软件开发管理及系统架构经验。负责过多个省级、国家大型分布式系统的微服务架构的技术改造,在实际工作中积累了大量的微服务架构经验。是CSDN、开源中国、云栖社区等技术区专家。已出版专著《Spring Boot企业级应用开发实战》《Spring Cloud微服务架构开发实战》。

Spring 5 是一个重要的版本,距离 Spring 4 发布有四年多了。通过本文的介绍,我们一起来快速了解 Spring 5 发行版中的那些令人兴奋的特性。

基准升级

要构建和运行 Spring 5 应用程序,你至少需要 Java EE 7 和 JDK 8。以前的 JDK 和 Java EE 版本不再支持。 Java EE 7 包含:

  • Servlet 3.1

  • JMS 2.0

  • JPA 2.1

  • JAX-RS 2.0

  • Bean Validation 1.1

与 Java 基准类似,许多其他框架的基准也有变化。例如:

  • Hibernate 5

  • Jackson 2.6

  • EhCache 2.10

  • JUnit 5

  • Tiles 3

另外,各种服务器的最低支持版本也已经升级。包括:

  • Tomcat 8.5+

  • Jetty 9.4+

  • WildFly 10+

  • Netty 4.1+

  • Undertow 1.4+

同时,Spring 5 已经与最新的 Jave EE 8 API 集成,这意味着,用户可以使用 Spring 5 来创建最新的功能的应用。

兼容最新的 JDK 9

Spring 5 支持 JDK 9。在运行时,类路径以及模块路径与 JDK 9 完全一致。

Spring 5 使用了 Java 8 和 Java 9 版本中的许多新特性。例如:

  • Spring 接口中的默认方法。

  • 基于 Java 8 反射增强的内部代码改进。

  • 在框架代码中使用函数式编程,如 Lambda 表达式 和 Stream 流。

同时,Spring 5 的后续版本将会积极做好 JDK 10 的适配工作。

响应式编程模型

响应式编程是 Spring 5 最重要的特性之一。响应式编程提供了另一种编程风格,专注于构建对事件做出响应的应用程序。Spring 5 包含响应流和 Reactor(由 Spring 团队提供的 Reactive Stream 的 Java 实现)。

在 Spring 5 中,Web 开发将会划分为两个分支,即传统的基于 Servlet 的 Web 编程(spring-webmvc 模块),以及支持响应式编程模型 Spring WebFlux (spring-web-reactive 模块)。

构建在 Reactive Streams API 上 的 Web 应用程序,可以在非阻塞服务器(例如Netty、Undertow 和 Servlet 3.1+ 容器)上运行。

函数式编程

除了响应式功能之外,Spring 5 还提供了一个函数式 Web 框架。它提供了使用函数式编程风格来定义端点的特性。该框架引入了两个基本组件:HandlerFunction 和 RouterFunction。

HandlerFunction 表示处理接收到的请求并生成响应的函数。 RouterFunction 替代了 @RequestMapping 注解。它用于将接收到的请求路由到处理函数。例如:

import static org.springframework.http.MediaType.APPLICATION_JSON;
import static org.springframework.web.reactive.function.server.RequestPredicates.*;

PersonRepository repository = ...
PersonHandler handler = new PersonHandler(repository);

RouterFunction<ServerResponse> personRoute =
   route(GET("/person/{id}").and(accept(APPLICATION_JSON)), handler::getPerson)
       .andRoute(GET("/person").and(accept(APPLICATION_JSON)), handler::listPeople)
       .andRoute(POST("/person").and(contentType(APPLICATION_JSON)), handler::createPerson);

多语言的支持

Spring 5 支持 Apache Groovy 、Kotlin 以及其他众多的动态语言。这些动态语言包括:

  • JRuby 1.5+

  • Groovy 1.8+

  • BeanShell 2.0

Spring 5 支持 Kotlin 1.1+ 。Kotlin 是一种静态类型的 JVM 语言,它让代码具有表现力、简洁性和可读性。同时,Kotlin 与用 Java 编写的现有库拥有良好的互操作性。

Spring 5 框架为 Kotlin 提供了一流的支持,允许开发人员编写 Kotlin 应用程序,其开发体验感觉 Spring 框架就是 Kotlin 的原生框架一样。

以下就是一个 Kotlin 编写的路由到特定端点的例子:

@Bean
fun apiRouter() = router {
   (accept(APPLICATION_JSON) and "/api").nest {
       "/book".nest {
           GET("/", bookHandler::findAll)
           GET("/{id}", bookHandler::findOne)
       }
       "/video".nest {
           GET("/", videoHandler::findAll)
           GET("/{genre}", videoHandler::findByGenre)
       }
   }
}

支持 HTTP/2

Spring 5 将提供专用的 HTTP/2 特性支持,以及对 JDK 9 中的新 HTTP 客户端的支持。尽管 HTTP/2 的服务器推送功能已经可以通过 Jetty Servlet 引擎的ServerPushFilter 类来实现,但是如果 Spring 5 能够提供开箱即用的 HTTP/2 性能增强功能,势必会提升用户的开发体验。

清理了旧代码

随着 Java、JavaEE 和其他一些框架基准版本的增加,Spring 5 取消了对以下几个框架的支持,如:

  • Portlet

  • Velocity

  • JasperReports

  • XMLBeans

  • JDO

  • Guava

这些被取消的框架,都可以用最新的 Java EE 标准来实现替换。

Spring 5 不再支持一些过时的 API。被剔除的是 Hibernate 3和4版本,它们已经被Hibernate 5所替换。

Spring 5 对包级别也进行了清理。Spring 5 不再支持beans.factory.access、jdbc.support.nativejdbc、mock.staticmock 以及 web.view.tiles2M 等包。

更强的测试套件

Spring Test 拥有了更强的测试套件,包括支持 Spring WebFlux 服务器端点集成测试的 WebTestClient。 WebTestClient 使用模拟请求和响应来避免运行服务器,并能够直接绑定到 WebFlux 服务器基础架构中。

WebTestClient 可以被绑定到一个真实的服务器或者与控制器一起工作。

以下例子演示了 WebTestClient 绑定到 localhost 地址:

WebTestClient testClient = WebTestClient
 .bindToServer()
 .baseUrl("http://localhost:8080")
 .build();

另外一个例子,则演示了 WebTestClient 绑定到 RouterFunction:

RouterFunction bookRouter = RouterFunctions.route(
 RequestPredicates.GET("/books"),
 request -> ServerResponse.ok().build()
);

WebTestClient
 .bindToRouterFunction(bookRouter)
 .build().get().uri("/books")
 .exchange()
 .expectStatus().isOk()
 .expectBody().isEmpty();

《Spring cloud微服务架构开发实战》x1

编辑推荐

(1)新。本书案例基于全新的Spring Boot 2.0及Spring Cloud Finchley.M2,深入浅出地讲解了Spring Cloud。 
(2)实战。跳脱纯理论讲述,案例贯穿全书,从0到1搭建微服务系统,从1到0实现微服务拆分。读者不仅能全面学到软件开发技能,还能学到项目实战经验。 
(3)全。弥补市面上有关 Spring Cloud学习资料的不足,重新编写整个教学案例,使读者轻松脱离“Hello World”阶段,实现对微服务的治理。

内容简介

众所周知,Spring Cloud 是开发微服务架构系统的利器,企业对 Spring Cloud 方面的开发需求也非常旺盛。然而,虽然市面上介绍 Spring Cloud 的概念及基础入门的书籍较多,但这些书籍中的案例往往只是停留在简单的“Hello World”级别,缺乏可真正用于实战落地的指导。 
  本书与其他书籍不同,特色是真正从实战角度出发,运用 Spring Cloud 技术来构建一个完整的微服务架构的系统。本书全面介绍 Spring Cloud 的概念、产生的背景,以及围绕 Spring Cloud 在开发微服务架构系统过程中所面临的问题时应当考虑的设计原则和解决方案。特别是在设计微服务架构系统时所面临的系统分层、服务测试、服务拆分、服务通信、服务注册、服务发现、服务消费、集中配置、日志管理、容器部署、安全防护、自动扩展等方面,给出了作者自己独特的见解。本书不仅介绍了微服务架构系统的原理、基础理论,还以一个真实的天气预报系统实例为主线,集成市面上主流的新的实现技术框架,手把手地教读者如何来应用这些技术,创建一个完整的微服务架构系统。这样读者可以理论联系实践,从而让 Spring Cloud 真正地落地。 
  此外,本书不仅可以令读者了解微服务架构系统开发的完整流程,而且通过实战结合技术点的归纳,令读者知其然且知其所以然。本书所涉及的技术符合当前主流,并富有一定的前瞻性,可以有效提高读者在市场中的核心竞争力。 
  本书主要面向以 Spring 为核心的 Java EE 开发者,以及对 Spring Cloud 和微服务开发感兴趣的读者。

关注「 聊点 」微信公众号

后台回复【抽奖】即可参与抽奖

作者简介

《Spring boot 企业级应用开发实战》x1

内容简介

本书面向实战,除了给出基本的原理外,会辅以大量的案例和源码,利于读者理论联系实践。全书对于技术讲解的安排,是按照渐进式的教学方式来进行的。按照学习的难度,大致可以分为实战入门阶段、实战进阶阶段、实战高级阶段三个部分,内容包括Spring Boot 概述、Spring 框架核心概念、Spring MVC 及常用MediaType、集成 Thymeleaf、数据持久化、全文搜索、架构设计与分层、集成Bootstrap、博客系统的需求分析与设计、集成Spring Security、博客系统的整体框架实现、用户管理实现、角色管理实现、权限管理实现、文件服务器实现、博客管理实现、评论管理实现、点赞管理实现、分类管理实现、标签管理实现、首页搜索实现等。本书围绕如何整合以Spring Boot 2 版本为核心的技术栈,来实现一个完整的企业级博客系统而展开。读者可以通过学习构建这个博客系统的整个过程,来达到设计和实现一个企业级 Java EE 应用开发的目的。该博客系统是一个类似于 WordPress 的专注于博客功能的博客平台,支持多用户访问和使用。该博客系统所涉及的相关技术有 Spring Boot、Spring、Spring MVC、Spring Security 、Spring Data、Hibernate、Gradle、Bootstrap、jQuery、HTML5、JavaScript、CSS、Thymeleaf、MySQL、H2、Elasticsearch、MongoDB 等,技术点较为丰富,内容富有前瞻性。

本书主要面向的用户是 Java 开发者,以及对 Spring Boot 及企业级开发感兴趣并有一定了解的读者。

关注「 Java架构师日记 」微信公众号

后台回复【抽奖】即可参与抽奖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值