Spring5新特性
1.整个框架代码基于java8,兼容jdk9
2.Spring5.0框架自带了通用的日志封装
(1)Spring5移除了Log4jConfigListener,官方建议使用Log4j2
(2)Spring5框架整合Log4j2
第一步:引入jar包
第二步:创建log4j2.xml,文件名字固定
日志级别以及优先级排序
OFF>fatal>error>warn>info>debug>trace>all
3.核心容器支持@Nullable注解
@Nullable注解可以使用在方法上面,属性,参数,表示方法返回可以为空,属性可以为空,参数值可以为空。
4.核心容器支持函数式风格GenericApplicationContext.
函数式风格创建对象,交给Spring进行管理。
5.支持整合Junit5
(1)支持Junit4
引入相关依赖
Spring整合Junit5
第一步引入jar包
创建测试类,使用注解
使用一个复合注解替代上面两个注解完成整合
Spring5框架新功能(Webflux)
(1)是Spring5添加的新的模块,用于web开发,功能和SpringMVC类似,webflux使用当前一种比较流程响应式编程出现的框架。
(2)传统web框架,比如SpringMVC,这些基于Servlet容器,webflux是一种异步非阻塞的框架,异步非阻塞框架在Servlet3.1以后才支持,核心是基于Reactor的相关API实现的。
什么是异步非阻塞
异步和同步针对调用者,调用者发送请求,如果等着对方回应之后才去做其他事情就是同步,如果发送请求之后不用等着对方回应就去做其他事情就是异步。
阻塞和非阻塞针对被调用者,被调用者收到请求后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后再去做事情就是非阻塞。
webflux特点
(1)异步非阻塞 在有限的资源下提高系统吞吐量和伸缩性。以Reactor为基础实现响应式编程。
(2)函数式编程,Spring5框架基于java8,webflux使用Java8函数式编程方式实现路由请求。
SpringMVC和webflux
(1)这两个框架都可以使用注解方式,都运行在tomcat等容器中
(2)SpringMVC采用命令式编程,webflux采用异步响应式编程
响应式编程
什么是响应式编程
响应式编程是面向数据流和变化传播的编程范式,这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
电子表格程序就是响应式编程的一个例子,单元格可以包含字面值或类似“=B1+C1”的公式,而包含公式的单元格的值会依据其他单元格的值变化而变化。
Java8及其之前版本
提供的观察者模式两个类Observer和Observable
3.响应式编程(Reactor实现)
响应式编程操作中,Reactor是满足Reactive规范框架
Reactor有两个核心类,Mono和Flux.这两个类实现接口Publisher,提供丰富操作符。Flux对象实现发布者,返回N个元素;Mono实现凡发布者,返回0个或1个元素
(3)Flux和Mono都是数据流的发布者,使用Flux和Mono都可以发出三种数据信号:元素值,错误信号,完成信号。错误信号和终止信号都代表终止信号,终止信号用于告诉订阅者信息流结束了,错误信号告诉订阅者数据流终止并且汇报错误信息。
4.代码演示flux和Mono
第一步引入依赖
三种信号特点
错误信号和终止信号不能共存
如果没有发送任何元素,而是直接发送错误或者完成信号,表示是空数据流
调用just或者其他方法只是声明数据流,数据流并没有发出
操作符:对数据流进行一道道操作,成为操作符,比如工厂流水线。
第一 map元素映射为新元素
第二 flatMap元素映射为流。
把每个元素转换为流,把转换后多个流合成一个输出
4.SpringWebflux执行流程和核心API
SpringWebflux基于Reactor,默认使用容器是Nety,Nety是高性能的NIO框架,异步非阻塞的框架
SpringWebflux执行过程和SpringMVC相似
SpringWebflux核心控制器