spring框架之Spring5新特性(总体第五篇)

上一篇文章中已经学习到了我们的Spring事务问题,在更早些的文章中已经学习到我们的Spring的AOP,IOC,DI,整合JDBCTemplate等一系列问题的学习,本篇文章也是Spring框架的最后一篇,学习关于我们的Spring5的一些新特性。

一、大致介绍

在这里插入图片描述

  • 整个Spring5框架的代码基于java8,运行兼容JDK9,许多建议不适用的类,都做了删除。

1、Spring5新功能之整合日志框架

(1)介绍

  • Spring5框架自带了通用的日志功能
    • Spring已经移除了Log4jConfigListener,官方建议使用Log4j版本2,如果你要使用的话,那就降低Spring版本。

(2)引入练习

  • 导入jar包
    在这里插入图片描述

  • 创建log4j2.xml文件,不能创建其他的文件名称
    在这里插入图片描述
    level等级越往右边,优先级越高,它就会显示前面的几个

  • 试一试效果
    在这里插入图片描述

    • 如果改为debug的话就会显示更多
      在这里插入图片描述
  • 如果需要在控制台在控制台进行输出的话,就如下配置
    在这里插入图片描述

2、Spring新功能Nullable注解和函数式注册对象

(1)Spring核心容器支持@Nullable注解

  • @Nullable注解可以使用在方法,属性,或者参数上面,表示方法返回值可以为空,用在属性上,表示可以为空,如果在参数上表示参数可以为空,如果不加注解,有时候可能会报错。
    • 用在方法上,表示方法返回值可以为空
      在这里插入图片描述
    • 加在参数上:表示参数可以为空
      在这里插入图片描述
    • 加载属性上面:表示该属性可以为空
      在这里插入图片描述

(2)Spring核心容器里面支持函数式GenericApplicationContext

  • 首先要创建GenericApplicationContext对象
  • 调用方法对对象进行注册,refresh方法
  • 注册过程:调用registerBean方法进行配置
  • 获取在spring里面注册的对象getBean(“类的全路径”)
    在这里插入图片描述
    在这里插入图片描述

3、Spring5整合JUnit5测试

(1)先看JUnit4整合的情况

  • 首先导入jar包
    在这里插入图片描述

我们之前都是要在Test方法里面,编写我们的代码如下,但是现在只要添加注解即可了,不用在麻哩麻饭的去写这么多。
在这里插入图片描述
在这里插入图片描述
可以直接使用Autowire的注解注入即可。
在这里插入图片描述

(2)整合JUnit5整合的情况

  • 同样的要先导入jar包,是导入Junit5的jar包

  • 然后创建测试类
    在这里插入图片描述

  • 采用符合注解
    在这里插入图片描述

4、Spring5新功能WebFulx

在这里插入图片描述

(1)WebFulx基本介绍

  • 什么是WebFulx
    • 是Spring5添加的新模块,用于web开发的,功能SpringMvc类似,Webflux使用当前流行的响应式编程出现的框架。
    • 传统的web框架,比如SpringMVC,这些都是基于Servlet容器来实现的,Webflux是一种异步非阻塞的框架,异步非阻塞的框架在Servlet3.1以后才支持,核心是基于Reactor的相关API实现的,但是同时它也支持Servlet
    • 什么是异步:同步异步其实就是针对的是调用者,你在吃饭,然后准备去打球,要给辅导员请假,同步就是你必须等到它同意,而且异步就是可以说了就去打球了,其他的不管。
    • 什么是非阻塞是针对对象的:A是调用者,B是被调用者,B得到一个被调用,直接给他反馈,这就是非阻塞,不反馈就是阻塞。
    • WebFlux的优势:第一步非阻塞(有限的资源下可以提高吞吐量和伸缩性,以Reactor实现的响应式编程),Spring5框架基于Java8,WebFlux使用Java8函数式编程方式实现路由请求(学过Vue框架的应该很好理解)
    • 与SpringMVC的比较:
      在这里插入图片描述
      都可以使用注解方式,都运行在Tomcat等容器中,SpringMvc采用命令式编程,这样写更容易理解,而WebFlux采用异步响应式编程。建议:如果远程服务调用的话,就建议采用WebFlux,其实他们两很多相同的。像网关处理这些地方就建议使用。

(2)响应式编程

  • 什么是响应式编程:“响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
    在这里插入图片描述
    在这里插入图片描述

  • Java8及之前版本:提供了Observer和Observalbe两个类通过观察者模式,学过Vue框架的话,其实感觉和数据的双向绑定差不多的概念。你另外一个表格里面的数据变化了,则这个表格的数据也要变化。

    • 执行发现什么都没有
      在这里插入图片描述
    • 再次修改
      在这里插入图片描述
    • 其实Spring底层是没有才用java8的两个类实现的,而是才用的Java9内的个类来实现的FLow(主要有两个方法,订阅和发布方法)来实现的
  • Reactor实现响应式编程【这种都是要满足一种规范Reactive规范,而我们的Reactor就是实现了Reactive规范的】

    • 两个核心类之一:Mono和Flux,都实现了Publisher接口,提供了丰富的操作符。
      • Flux能实现发布者,返回N个元素
      • Mono实现翻发布者,返回0或者1个元素。
    • Flux和Mono都是数据流的发布者,使用Flux和Mono都是可以发出三种数据信号,元素值,错误信号,完成信号,错误信号和完成信号都是代表终止信号,终止信号用于告诉订阅者数据流结束了,错误信号也终止信号,吧错误信息返回给用户。
      在这里插入图片描述
  • 项目练习,以后的项目都是采用Maven来完成项目的包管理

    • 引入依赖
      在这里插入图片描述
      在这里插入图片描述
    • 三种信号中,错误和完成信号都是终止信号,不能共存的,如果没有发送任何元素值,而是直接发送错误或者完成信号,表示空数据流,如果没有错误信号,
    • 进行订阅,没有订阅什么都不会发生的
      在这里插入图片描述
  • 操作符:对数据流进行一道道的操作,就是操作符,比如工厂的流水线中的一个个工人。

    • 第一常见的map 元素映射为新元素。
      在这里插入图片描述
    • 第二个常见的flatMap 把元素映射为流。把每个元素转为流,把全部流合并一个大流,然后发送
      在这里插入图片描述

(3)WebFlux执行流程和核心

SpringWebFlux基于Reactor,默认使用容器是Netty,netty是高性能的NIO框架,异步非阻塞的框架

(3.1)Netty

  • BIO:每次都要建立一个线程,都要进行阻塞进行处理
    在这里插入图片描述
  • netty是采用NIO的异步非阻塞的
    在这里插入图片描述

(3.2)WebFlux执行过程

执行过程和SpringMVC过程是很相似的。

  • 核心控制器:是采用核心控制器DispatchHandler,实现接口WebHandler
    在这里插入图片描述
    在这里插入图片描述
  • 核心控制器:它主要是负责请求的处理
    • HandlerMapping:根据请求找出请求方法
    • HandlerAdapter:适配器,负责请求处理
    • HandlerResultHandler :负责响应结果进行处理

(3.3)核心API

有两个核心的接口

  • RouterFunction:路由功能,将路由请求转发给对应的方法
  • HandlerFunction:处理对应的函数。

(4)SpringWebFlux基于注解形式编程

和springmvc非常相似的,只需要把相关依赖配置到项目中,SpringBoot自动配置相关容器,默认情况使用Netty服务器。

  • 这里创建SpringBoot项目
    在这里插入图片描述

  • 配置启动的端口号
    在这里插入图片描述

  • 创建实体类
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • SpringMvc是采用Servlet,Tomcat,

(5)SpringWebFLux基于函数式编程模型

  • 在使用函数式编程模型操作时候,需要自初始化服务器

  • 基于函数式编程模型时,有两个核心接口,RouterFunction(实现路由功能,请求转发给对应的Handler)和HandlerFunction(处理请求生成响应的函数),核心任务定义两个函数式接口的实现并且启动需要的服务器。

  • SpringWebFlux请求和响应不再是ServletRequest和ServletResponse,而是ServerRequest和ServerResponse

  • 之前的除了Controller删除以外,其他的都不变。吧Controller改为Handler
    在这里插入图片描述
    在这里插入图片描述

  • 初始化服务器,编写Router
    在这里插入图片描述
    在这里插入图片描述

    • 编写路由
      在这里插入图片描述
      在这里插入图片描述
    • 创建服务器
      在这里插入图片描述
      在这里插入图片描述
  • 端口号是生成的。

(6)WebClient实现调用

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值