Spring 5

Spring 5于2017年底发布。Spring 5为Spring框架带来了一次大规模更新。Spring 4于2013年发布,因此每个人都在期待框架的重大改进。我很高兴看到Spring框架中的新功能。

Spring 5功能

Spring 5的功能可以大致分为以下几类:

  • Java基线支持
  • 核心API增强
  • Spring Web MVC增强
  • Spring WebFlux
  • 支持Kotlin的函数式编程
  • 测试改进
  • 废弃支持和移除的包

Java基线支持

  • Spring 5运行在Java 8上,因此Spring代码可以利用lambda表达式来提高代码的可读性。
  • Spring 5也支持Java 9,因此我们也可以基于模块化架构创建应用程序。
  • 春季5支持Java EE 7,也与Java EE 8兼容。因此,我们可以在我们的应用程序中使用Servlet 4.0,Bean Validation 2.0,JPA 2.2。我们还可以使用它们的旧版本,即Servlet 3.1,Bean Validation 1.1,JPA 2.1
  • Spring 5首选的服务器版本为Tomcat 8.5+,Jetty 9.4+和WildFly 10+。

I really like that spring 5 is trying to catch up to the latest version of different technologies.

核心API增强

  • 在包级别对非空API进行声明。可为null的参数、字段和返回值都明确注释了@Nullable注解。
  • 文件操作通过NIO 2流执行,即没有FileInput/Output流。这对基于文件的应用程序是一项巨大的增强和性能提升。
  • Spring Framework 5.0带有自己的Commons Logging桥接器;spring-jcl而不是标准的Commons Logging。
  • 通过索引文件“META-INF/spring.components”支持通过文件而不是类路径扫描提供spring组件信息。如果您有一个庞大的Spring项目和许多Spring组件,这将大大提高启动时间。对开发人员来说也更好,因为我们可以直接查看指定的文件以找出应用程序入口点,而无需搜索整个类路径文件。

Spring Web MVC Enhancements

Spring MVC模块在使用最新Java EE技术方面进行了重大改进。以下是一些主要增强:

  • Spring提供的Filter实现中完全支持Servlet 3.1签名。
  • 在Spring MVC控制器方法中支持Servlet 4.0的PushBuilder参数。
  • 在常见服务器上对Servlet 3.0多部分解析的最大上传大小超过异常。
  • 通过MediaTypeFactory委托统一支持常见媒体类型。
  • 使用KotlinLombok@ConstructorProperties实现对不可变对象的数据绑定。
  • 支持JSON Binding API,作为Jackson和GSON的替代方案。
  • 支持Reactor 3.1的FluxMono,以及RxJava 1.3和2.1作为Spring MVC控制器方法的返回值。
  • 支持ResponseStatusException作为@ResponseStatus的编程替代方案。

Spring WebFlux

Spring WebFlux是一个新的模块,它是spring-webmvc模块的替代品,基于响应式框架构建。该模块用于创建完全异步和非阻塞的应用程序,基于事件循环执行模型。

  • Spring核心中的响应式基础设施,如编码器和解码器,用于编码和解码对象流。
  • @Controller风格,基于注解的编程模型,类似于Spring MVC,但在WebFlux中受支持,运行在响应式堆栈上。
  • 新的WebClient具有用于HTTP调用的功能性和响应式API,类似于RestTemplate,但通过流畅的API进行,还通过基于WebFlux基础设施在非阻塞和流式情景中表现出色。

支持Kotlin的函数式编程

Spring 5现在也支持Kotlin编程。这是支持函数式编程的重要一步,就像Java也正在朝着函数式编程的方向发展一样。

  • 支持Null安全API
  • 支持具有可选参数和默认值的Kotlin不可变类。
  • 利用 Kotlin 的具体化类型参数来避免在诸如 RestTemplate 或 WebFlux API 等各种 API 中明确指定用于序列化/反序列化的类。
  • 支持 Kotlin 自动装配构造函数和可选参数。
  • Kotlin 空安全支持 @Autowired/@Inject 以及 @RequestParam/@RequestHeader/等注解。

测试改进

  • 支持 JUnit 5
  • 支持在 Spring TestContext 框架中并行执行测试

已弃用的支持和已移除的包

  • spring-aspects 模块中移除了包 beans.factory.accessjdbc.support.nativejdbcmock.staticmock
  • 移除了包 web.view.tiles2orm.hibernate3/hibernate4。这意味着如果您计划使用 Spring 5,您还必须使用 Hibernate 5。
  • 停止支持旧技术Portlet、Velocity、JasperReports、XMLBeans、JDO、Guava。如果您正在使用其中任何一种技术,请迁移到其他技术,或者继续使用Spring 4。

以上是关于Spring 5功能的快速概述。参考:Spring GitHub文档

Source:
https://www.digitalocean.com/community/tutorials/spring-5