Spring Framework 5 FAQ

什么是Spring Framework 5?

Spring Framework 5是Spring Framework的主要版本升级,已经有好几年了。它引入了一个名为Spring WebFlux的新的非阻塞Web框架 ,它使用Reactor  来支持Reactive Streams  API。它还提供了一个替代注释控制器的函数式编程,一流的Kotlin语言支持,以及与JUnit 5的一流集成。它基于Java 8语言特性,旨在与Java 9一起使用。

有关更多详细信息,请参阅参考文档,或观看 Juergen Hoeller的Spring Framework 5主题和趋势。

Spring Boot是否支持Spring Framework 5?

是的,Spring Boot 2.x系列是基于Spring Framework 5. Spring Boot 2.0 预计将  在Spring Framework 5.0之后普遍可用,旨在围绕SpringOne Platform的时间框架。请暂时使用最新的Spring Boot 2.0里程碑,已经发布了Spring Framework 5.0。有关最新版本,请查看spring.io/spring-boot  网站或GitHub。

我们为什么要介绍Spring WebFlux?

阻塞线程消耗资源。对于需要处理大量并发请求的延迟敏感型工作负载,非阻塞异步编程模型更有效。这对于移动应用程序和互连的微服务尤其重要,并且通常用于具有许多客户端和不均匀工作负载的场景。

Spring WebFlux的目标是为Spring开发人员提供类似于node.js的非阻塞事件循环样式编程模型。有关更多详细信息和演示,请通过Rossen Stoyanchev观看使用Spring Framework 5的五个用例  和反应式Web应用程序中的Servlet vs Reactive Stacks。

我可以在Spring Framework 5中使用Spring MVC吗?

当然,基于Servlet的Spring MVC仍然作为新WebFlux框架的一流选择。升级到Spring Framework 5不需要重写您的应用程序以使用Spring WebFlux。无论如何,如果您正在开发无法从非阻塞编程模型中受益的Web应用程序,或者使用阻塞JPA或JDBC API来实现持久性(通常与线程绑定事务结合使用),请继续使用Spring MVC。

作为奖励,Spring MVC还支持反应式返回类型作为其DeferredResult功能的替代方案,允许使用新的WebClient或反应式数据存储驱动程序进行异步响应,即使在传统的Servlet安排中也是如此。但请注意,只有完整的WebFlux堆栈才能在事件循环模型中提供完全无阻塞的I / O.

Mono和Flux是什么?

Spring Framework 5中的WebFlux框架使用Reactor  作为其异步基础。此项目提供核心类型,Mono 表示单个异步值,Flux  表示异步值流。它还提供了一个操作库, 用于操作这些值。有关更多信息,请参阅 GitHub上的reactor-core  和reactive-streams-commons项目。

如何使我的所有代码都无阻塞?

要使处理程序完全无阻塞,您需要在整个处理链中使用反应库,一直到持久层。反应性Spring数据库已经可用于Cassandra,MongoDB,Redis和Couchbase。请注意,JPA和JDBC本质上是阻止API; 我们仍在等待非阻塞关系数据库驱动程序的共同点。

其他已经被动的Spring项目包括Spring Security,Spring Vault和Spring Cloud Stream。

如果我的数据库没有反应库,该怎么办?

处理阻塞和非阻塞代码混合的一个建议是使用微服务边界的功能将阻塞后端数据存储代码与非阻塞前端API分离。或者,您也可以使用工作线程池来阻止操作,从而使主事件循环保持非阻塞状态。

与RxJava等其他反应库的互操作性如何?

Reactor使用与RxJava相同的底层Pub / Sub API和其他  基于Reactive Streams的库(Kaazing,Lightbend,Netflix,Pivotal,Red Hat,Twitter等众多工程师之间的协作)。

WebFlux中的带注释的处理程序方法(以及在有限的程度上甚至在Spring MVC中)也可以声明RxJava 1.x或2.x类型,框架会自动调整相应的Reactor发布者。如果您碰巧拥有基于RxJava的驱动程序和/或对基于RxJava的处理逻辑的偏好,这很有意义。

我还可以用注释编写控制器方法吗?

是的,Spring MVC和Spring WebFlux都支持使用@ Controller,@ RequestMapping等相同的基于注释的编程模型。而不是获取线程的所有权并立即执行工作,WebFlux控制器方法对异步请求和响应类型进行操作。

我可以在不使用注释的情况下编写控制器方法吗?

是的,对于喜欢避免注释和反射神奇的开发人员,Spring Framework 5提供了一种新的功能API,  可以通过编程方式匹配路由和处理程序功能。这可以通过Java 8中的第一个类函数支持使用lambdas或方法引用来实现。有关如何组合处理程序的更多信息,请参阅 Arjen Poutsma 撰写的Spring Framework 5:Functional Web Framework中的新文章。

WebFlux框架将运行哪些HTTP服务器?

WebFlux框架侧重于Tomcat和Jetty以及Netty和Undertow('underow-core',不需要'underow-servlet')。由于它旨在支持异步编程,因此框架永远不会公开Servlet API - 但它可以将其Reactive Streams层调整到封面下的Servlet 3.1容器的非阻塞功能上(对Tomcat和Jetty的最佳支持以及最佳 - 在运行时对其他Servlet容器的适应性)。

HTTP客户端代码怎么样?

该AsyncRestTemplate已弃用赞成新的Web客户端提供了一个更流畅的API,并且能够既同步和异步在一个封装的。RestTemplate本身并没有被弃用,使用它没有任何问题; WebClient可以被视为更现代化的继承者

Spring Framework 5是否适用于Java 6或Java 7?

不,Spring Framework 5需要Java 8或更高版本。请继续使用Spring Framework 4.3 for Java 6/7场景。

Spring Framework 5是否适用于新的Java 9模块系统?

是的,Spring Framework 5在Spring Framework 5 jar的清单中附带了自动模块名称条目。Spring库的公共API表面保持不变。

Spring Framework 5是否支持Kotlin?

是的,Spring Framework 5正式支持Kotlin。有关更多详细信息,请参阅Kotlin支持文档。在Spring Framework 5中还有两篇关于Kotlin支持的博文:在Spring Framework 5和Spring Framework 5中引入Kotlin支持,功能方式是SébastienDeleuze。

如何升级到Spring Framework 5?

有关迁移到Spring Framework 5的详细信息,请参阅此Wiki页面。

Spring5.0(2)--- Framework 5 FAQ相关推荐

  1. Spring5学习(二):Spring 配置、依赖注入

    Spring5学习(二) 5.Spring 配置 5.1 别名 5.2 Bean的配置 5.3 import 6.依赖注入 6.1 构造器注入 6.2 Set注入 6.3 其他注入 6.4 bean的 ...

  2. Java总结:Spring5框架(1)

    Spring5框架(1) 一:什么是Spring? Spring框架是由于软件开发的复杂性而创建的.Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情.然而,Spring的用 ...

  3. 猪猪猫.CN-WINXPSP2电脑城装机豪华版9.0 (DVD) 2007.03.25

    ============================================================ MD5:0420adf6ae9d706e65c5bcc007728cfa   ...

  4. 系统linux/redhat6.5 zabbix 2.47监控nginx1.8.0 (下)

    2019独角兽企业重金招聘Python工程师标准>>> 6  zabbix_get获取数据(服务器端) (测试是否能接受到数据) zabbix_get -s 172.16.145.7 ...

  5. 我的Debian 8.0 (jessie)配置文档

    2019独角兽企业重金招聘Python工程师标准>>> 我的Debian  8.0 (jessie)配置文档 1,添加软件源  su到root用户 vi  /etc/apt/sou ...

  6. CodeArt WSS3.0(MOSS)字段编辑权限控制解决方案(v1.0)

    Windows SharePint Service 3.0(或MOSS)默认不支持字段级的权限.而在项目的实施过程中,客户经常会提出这个需求. 解决方案有两种: 1)开发自定义的字段,在字段上附加控制 ...

  7. ArcGIS API for JavaScript 4.0(一)

    原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...

  8. android AVB2.0(四)libavb库介绍

    本篇android AVB2.0学习总结系统的第四篇,接上篇android AVB2.0(三)Init阶段安全启动流程, 这里介绍一下libavb库的详细实现. 请支持原创,原文链接:https:// ...

  9. XenApp_XenDesktop_7.6实战篇之二十一:Linux Virtual Desktop 1.0(下篇)

    在Linux Virtual Desktop 1.0(上篇)完成了系统要求介绍.更新Delivery Controller和准备Linux系统三部分的内容,在本文章中我们将在上篇的基础上继续介绍创建计 ...

最新文章

  1. 【网安干货】MySQL8新特性注入技巧
  2. XML DOM Node List
  3. boost::next_permutation相关的测试程序
  4. 关于“豪猪”,你理解的透彻吗?【Hystrix是个什么玩意儿】
  5. python time 语句_python的time模块总结
  6. 结对编程作业——毕设导师智能匹配
  7. 教你创建自己的CSDN博客专栏
  8. LVS 工作模式以及工作原理
  9. 下载安装 Ubuntu 19.04 “Disco Dingo”
  10. diff测试与流量回放测试
  11. 与人和代码打交道,有何不同?
  12. 全球新能源500强四季沐歌借助氚云搭建业务系统,实现人效翻倍!
  13. 企业要如何利用360评估法做好人才盘点?
  14. 被封了?教你如何解封chatgpt账号,中英版都有
  15. 紫光同创国产FPGA学习之IP Compiler
  16. 泣神曲服务器维护,泣神曲手游预约-泣神曲官网安卓版预约v1.0.0_第一手游网
  17. element-ui中el-container容器与div布局区分
  18. python图片相似度计算_python Opencv计算图像相似度过程解析
  19. Perl语言入门笔记 第六章 哈希(hash)
  20. HQChart使用教程30-K线图如何对接第3方数据20-信息地雷公告数据

热门文章

  1. php 立即执行函数,关于javascrip的立即执行函数的解析
  2. 内核中接收网络帧的处理
  3. 高性能HTTP加速器Varnish(概念篇)
  4. 典型的SPI控制器的结构
  5. [C++] - C++11 多线程 - Thread
  6. java deque_使用Deque
  7. JavaScript重难点解析4(作用域与作用域链、闭包详解)
  8. linux恢复桌面,ubuntu恢复unity桌面
  9. 死锁 操作系统第二章知识点归纳总结
  10. Android下Cocos2d创建HelloWorld工程