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委托统一支持常见媒体类型。
- 使用Kotlin,Lombok,@ConstructorProperties实现对不可变对象的数据绑定。
- 支持JSON Binding API,作为Jackson和GSON的替代方案。
- 支持Reactor 3.1的Flux和Mono,以及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.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文档
Source:
https://www.digitalocean.com/community/tutorials/spring-5