《Spring5 官方文档》新特性

原文链接 译者:supriseli

Spring 框架的新功能

这一章主要提供 Spring 框架新的功能和变更。

升级到新版本的框架可以参考。Spring git

内容列表

Spring 5.x 框架新的功能

Spring 4.x 框架新的功能

Spring 3.x 框架新的功能

Spring FrameWork 5.0 新的功能

JDK 8+ 和 Java EE7+ 以上版本

  • 整个框架的代码基于 java8
  • 通过使用泛型等特性提高可读性
  • 对 java8 提高直接的代码支撑
  • 运行时兼容 JDK9
  • Java EE 7API 需要 Spring 相关的模块支持
  • 运行时兼容 Java EE8 API
  • 取消的包, 类和方法
  • 包 beans.factory.access
  • 包 dbc.support.nativejdbc
  • 从 spring-aspects 模块移除了包 mock.staicmock, 不在提 AnnotationDrivenStaticEntityMockingControl 支持
  • 许多不建议使用的类和方法在代码库中删除

核心特性

JDK8 的增强:

  • 访问 Resuouce 时提供 getFile 或和 isFile 防御式抽象
  • 有效的方法参数访问基于 java 8 反射增强
  • 在 Spring 核心接口中增加了声明 default 方法的支持一贯使用 JDK7 Charset 和 StandardCharsets 的增强
  • 兼容 JDK9
  • Spring 5.0 框架自带了通用的日志封装
  • 持续实例化 via 构造函数 (修改了异常处理)
  • Spring 5.0 框架自带了通用的日志封装
  • spring-jcl 替代了通用的日志,仍然支持可重写
  • 自动检测 log4j 2.x, SLF4J, JUL(java.util.Logging)而不是其他的支持
  • 访问 Resuouce 时提供 getFile 或和 isFile 防御式抽象
  • 基于 NIO 的 readableChannel 也提供了这个新特性

核心容器

  • 支持候选组件索引 (也可以支持环境变量扫描)
  • 支持 @Nullable 注解
  • 函数式风格 GenericApplicationContext/AnnotationConfigApplicationContext
  • 基本支持 bean API 注册
  • 在接口层面使用 CGLIB 动态代理的时候,提供事物,缓存,异步注解检测
  • XML 配置作用域流式
  • Spring WebMVC
  • 全部的 Servlet 3.1 签名支持在 Spring-provied Filter 实现
  • 在 Spring MVC Controller 方法里支持 Servlet4.0 PushBuilder 参数
  • 多个不可变对象的数据绑定 (Kotlin/Lombok/@ConstructorPorties)
  • 支持 jackson2.9
  • 支持 JSON 绑定 API
  • 支持 protobuf3
  • 支持 Reactor3.1 Flux 和 Mono

SpringWebFlux

  • 新的 spring-webflux 模块,一个基于 reactive 的 spring-webmvc,完全的异步非阻塞,旨在使用 enent-loop 执行模型和传统的线程池模型。
  • Reactive 说明在 spring-core 比如编码和解码
  • spring-core 相关的基础设施,比如 Encode 和 Decoder 可以用来编码和解码数据流;DataBuffer 可以使用 java ByteBuffer 或者 Netty ByteBuf;ReactiveAdapterRegistry 可以对相关的库提供传输层支持。
  • 在 spring-web 包里包含 HttpMessageReade 和 HttpMessageWrite

测试方面的改进

  • 完成了对 JUnit 5’s Juptier 编程和拓展模块在 Spring TestContext 框架
  • SpringExtension: 是 JUnit 多个可拓展 API 的一个实现,提供了对现存 Spring TestContext Framework 的支持,使用 @ExtendWith(SpringExtension.class) 注解引用。
  • @SpringJunitConfig: 一个复合注解
  • @ExtendWith(SpringExtension.class) 来源于 Junit Jupit
  • @ContextConfiguration 来源于 Srping TestContext 框架
  • @DisabledIf 如果提供的该属性值为 true 的表达或占位符,信号:注解的测试类或测试方法被禁用
  • 在 Spring TestContext 框架中支持并行测试
  • 具体细节查看 Test 章节 通过 SpringRunner 在 Sring TestContext 框架中支持 TestNG, Junit5, 新的执行之前和之后测试回调。
  • 在 testexecutionlistener API 和 testcontextmanager 新 beforetestexecution()和 aftertestexecution() 回调。MockHttpServletRequest 新增了 getContentAsByteArray()和 getContentAsString() 方法来访问请求体
  • 如果字符编码被设置为 mock 请求,在 print()和 log() 方法中可以打印 Spring MVC Test 的 redirectedUrl()和 forwardedUrl() 方法支持带变量表达式 URL 模板。
  • XMLUnit 升级到了 2.3 版本。