Spring 5框架完全指南:新特性与核心功能解析

这是文章《Spring的第五个版本》的第1部分(共1部分)。

内容片段: 2017年底发布了Spring 5。Spring 5对Spring框架进行了大规模更新。2013年发布了Spring 4,因此所有人都期待着这个框架的重大改进。我很高兴看到Spring框架的新特性。

Spring 5的特点

Spring 5的特性可以大致分为以下几个类别:

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

Java基线支持

  • Spring 5运行在Java 8上,因此Spring代码可以利用lambda表达式来提高代码可读性。
  • Spring 5也支持Java 9,因此我们也可以基于模块化架构创建我们的应用程序。
  • Spring 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+。

我非常喜欢Spring 5正在努力迎头赶上不同技术的最新版本。

核心API增强

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

Spring Web MVC的增强功能

Spring MVC模块在使用最新的Java EE技术方面进行了重大改进。其中一些主要的增强包括:

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

响应式Web框架

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

  • spring-core中的响应式基础设施,如用于对象流编码和解码的Encoder和Decoder。
  • @Controller风格的基于注解的编程模型,类似于Spring MVC,但在WebFlux中支持,运行在响应式堆栈上。
  • 新的WebClient具有用于HTTP调用的函数式和响应式API,可与RestTemplate相媲美,但通过流畅的API,并且在基于WebFlux基础设施的非阻塞和流式场景中表现出色。

支持Kotlin的函数式编程

现在,Spring 5也支持Kotlin编程了。这是对支持函数式编程的巨大进步,就像Java也在朝着函数式编程的方向发展。

  • 支持空安全API
  • 支持带有可选参数和默认值的Kotlin不可变类。
  • 利用Kotlin具体化类型参数,避免在各种API(如RestTemplate或WebFlux API)中显式指定用于序列化/反序列化的类。
  • 支持带有可选参数的Kotlin自动装配构造函数。
  • 为@Autowired/@Inject和@RequestParam/@RequestHeader等注解提供Kotlin空安全支持。

测试改进

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

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

  • 从spring-aspects模块中移除了beans.factory.access、jdbc.support.nativejdbc、mock.staticmock包。
  • 移除了web.view.tiles2和orm.hibernate3/hibernate4包。这意味着如果你计划使用Spring 5,你将不得不使用Hibernate 5。
  • 放弃了对旧技术Portlet、Velocity、JasperReports、XMLBeans、JDO、Guava的支持。如果你正在使用其中任何一种,那么要么迁移到其他技术,要么继续使用Spring 4。

这就是对Spring 5功能的简要概述。参考来源:Spring GitHub文档。

bannerAds