访问Resource时提供getFile或isFile防御式抽象
有效的方法参数访问基于java8反射增强
在spring核心接口中增加了声明default方法的支持一贯使用jdk7, charset和standardcharset的增强
兼容jdk9
自带了通用的日志封装
(1) 已经移除了log4jConfigListener,官方建议使用log4j2
(2) Spring5框架整合了log4j
(3) 第一步引入jar包
(4) 第二部创建log4j2.xml配置文件
(5)持续实例化via构造函数(修改了异常处理)
Spring-jcl替代了通用的日志,俨然可以支持重写
自动检测log4j2.x,SLF4J,JUL(java.util.logging)而不是其他的支持
访问Resource时提供getFile或isFile防御式抽象,
基于NIO的readableChannel也提供了这个新特性
支持候选组件(也可以支持环境扫描)
支持@Nullable注解
函数式风格GenericApplicationContext/AnnotationConfigApplicationContext
基本支持beanAPI注册
在接口层面使用CGLIB动态代理的时候,提供事务,提供事务,缓存,异步注解检测
Xml配置作用域流
Spring webMVC
全部的Servlet3.1签名支持Spring-proviedFillter实现
在SpringMVCController方法里支持Servlet4.0PushBuilder参数
多个不可变对象的数据绑定(Kotlin/Lombok/@ConstrutorPorties)
支持jackson2.9
支持JSON绑定API
支持protobu3
支持Reactor3.1 Flux和Mono
(1)@Nullable注解可以使用在方法上面,属性上面,表示方法返回可以为空,属性值可以为空,参数值可以为空,
(2)注解用在方法上面,方法返回值可以为空
(3)注解使用在方法参数里面,方法参数可以为空,
(4)注解使用在属性上面,属性值可以为空
函数式风格创建对象,交给spring管理,
(1) 整合Junit4
第一步引入依赖
(2) 第二步创建测试类,使用注解方式完成
(3) Spring5整合Junit5
第一步引入junit的jar包
(4) 创建测试类,使用注解完成
阻塞和非阻塞针对被调用者,被调用者收到请求之后,做完任务之后给出反馈就是阻塞,收到请求之后马上给出反馈然后再去做其他事情就是非阻塞
(4)WebFlux
第一步非阻塞式:可以再有限资源下,提高系统吞吐量和伸缩性,一Refactor实现响应式编程
第二函数式编程: Spring5框架基于java8,webflux使用java8函数式编程方式实现路由请求
比较springMVC
(1)两个框架都可以使用注解方式,都运行在tomact等容器
(2)SpringMVC命令式编程,WebFlux采用异步响应式编程
响应式编程
(1) 什么是响应式编程,
响应式编程是一种面向数据流和变化传播的编程范式,这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播
(2) Java8及其之前版本
提供观察者模式两个类Observer和Observable
响应式编程(Refactor实现)
(1) 响应式编程操作中,refactor是满足Reactive规范框架
(2) Reactor有两个核心类,Mono和flux,这两个类实现接口Publisher,提供丰富操作符,Flux对象,实现发布者,返回N个元素,Mono实现发布者,返回0或者1个元素
(3) Flux和Mono都是数据流的发布者,使用flux和Mono都可以发出三种数据信号,元素值,错误信号,完成信号,都代表终止信号, 终止信号用于告诉订阅者数据流结束了,错误信号终止数据流同时把错误信息传递给订阅者
(4) 代码演示Flux和Mono
(5) 三种信号特点
错误信号和完成信号都是终止信号,不能共存的,如果没有发送任何元素值,而是直接发送错误或者完成信号,表示是空数据流,
如果没有错误信号,没有完成信号,表示是无线数据流,
(6) 调用just或者其他方法只是声明数据流,数据流并没有发出,只有进行订阅之后才会触发数据流,不订阅声明都不会发生的
(7) 操作符
对数据流进行一道道操作,成为操作符,比如工厂流水线
(1) map元素映射为新元素
(2) flatMap元素映射为流
把每个元素转换为流,把转换之后多个流合并大的流
webFlux执行流程和核心api
SpringWebFlux基于Reactor,默认使用容器是Netty,Netty是高性能的NIO框架,异步非阻塞的框架,
(1) Netty
BIO
NIO
(2) SpringWebFlux执行过程和SpringMVC相似的,
SpringWebFlux核心控制器DispatchHandler,实现接口,
(3) SpringWebFlux里面DispatcherHandler,负责请求的处理
HandlerMapping请求查询到处理的方法
HandlerAdapter真正负责请求处理
HandlerResultHandler响应结果处理
(4) SpringWebFlux实现函数式编程,两个接口:RouterFunction(路由处理)和HandlerFunction(处理函数)
SpringWebFlux实现方式有两种,注解编程模型和函数式编程模型
使用注解编程模型方式,和之前SpringMVC使用相似的,只需要把相关依赖配置到项目中,SpringBoot自动配置相关运行容器,默认情况下使用Netty服务器
第一步创建SpringBoot工程,引入webFlux依赖
第三步创建包和相关的类
创建接口定义操作的方法
编写接口实现类
创建controller
说明:
springMVC方式实现,同步阻塞的方式
SpringWebflux方式实现,异步非阻塞方式,基于springWebflux+Reactor+Netty
SpringwebFlux(基于函数式编程模型)
(1) 在使用函数式编程模型操作时,需要自己初始化服务器
(2) 基于函数式编程模型时候,有两个核心接口,RouterFunction(实现路由功能,请求转发给对应的handler)和HandlerFunction(处理请求生成响应的函数),核心任务定义两个函数式接口的实现并且启动需要的服务器
(3) SpringWebFlux请求和响应不再是ServletRequest和ServletResponse,而是ServerRequest和ServerResponse
第一步把注解编程模型工程复制
第二步创建handler(具体实现方法)
第三步初始化服务器,编写Router
JdbcTemplate
(1) 使用jdbcTemplate实现数据库curd操作
(2) 使用jdbcTemplate实现数据库批量curd操作
事务管理
(1) 事务概念
(2) 重要概念(传播行为和隔离级别)
(3) 基于注解实现声明式事务管理
(4) 完全注解方式实现声明式事务管理-
Spring5新特性
整合日志框架
@Nullable注解
函数式注册对象
整合Junit5单元测试框架
SpringWebFlux使用