SpringOne 2022第1个议题《Introducing Spring Framework 6》,主要介绍了Spring Framework6的关键特性以及里程碑,演讲者:Juergen Hoeller。

1.版本里程碑
2个GA版本
2022-11,发布
Spring Framework 6.0 GASpring Framework 6.0 GA配套Java 17/18/19- 匹配
Spring Boot 3.0&3.1
2023-07,发布
Spring Framework 6.1 GASpring Framework 6.1 GA配套Java 17/18/19/20/21- 匹配
Spring Boot 3.2&3.3

详细日程表

6.x vs 5.3.x
| Spring Framework 5.3.x | Spring Framework 6.x | |
|---|---|---|
| Java版本 | Java 8/11/17 | Java 17+ |
| Java EE版本 | Java EE 7/8(javax namespace) | Jakarta EE 9/10(jakarta namespace) |
命令式编程模型和响应式编程模型 | 新增 | 继承 |
配套Spring Boot | Spring Boot 2.7.x | Spring Boot 3.x |
AOT(Ahead-Of-Time) | - | 新增 |
虚拟线程 | - | 新增(基于Loom) |
2.Java对Spring Framework的影响
如下列举了对Spring Framework产生影响的Java 17新特性:
- 语言层:text blocks、switch改进
- 类型系统:records、sealed classes
- 代码组织形式:module introspection、module path scanning
- 标准库:集合的工厂方法(
collection factory methods)- 如:
List<Integer> list = List.of(); - 参考:https://stackoverflow.com/questions/43533835/java-9-what-are-collection-factory-methods
- 如:
3.Java EE对Spring Framework的影响
从Java EE 8到Jakarta EE 9的升级,也会对Spring Framework产生影响:
Servlet API 5.0:javax.servlet变为jakarta.servlet- 基于
Servlet API 5.0/6.0的Web容器:Tomcat 10.0/10.1Jetty 11/12Undertow 2.3
- 基于
JPA 3.0:javax.persistence变为jakarta.persistence- 基于
JPA 3.0/3.1的ORM及Validator:Hibernate ORM 6.1Hibernate Validator 7.0/8.0
- 基于
4.AOT对Spring Framework的影响
伴随Java17对AOT的关注和支持,Spring Framework也增加了对AOT的支持。
Java对AOT的支持有两种技术路线:
GraalVM:编译期直接将Java源码变成可执行二进制(native executables)CRaC:保存JVM的Checkpoint,进而支持针对Checkpoint的还原(Coordinated Restore at Checkpoint)OpenJDK启动了名为CRaC的项目- 参考:https://wiki.openjdk.org/display/crac
5.虚拟线程对Spring Framework的影响
随着虚拟线程作为Java19的预览特性,Spring Framework也进行了支持,但Juergen Hoeller对虚拟线程的阐述比较辩证:
- 不要盲目迷信
虚拟线程,需要在合适的场景下使用,演讲中举了两类适用的场景:- 如:基于IO流的Servlet
- 如:@Scheduler管理的消息型系统
- 不适用的场景:纯CPU计算型的业务逻辑(
purely CPU-bound handlers)
6.总结
Spring Framework作为一个底层框架,它的输入往往来自于Java语言规范、Java EE标准。- Spring团队规划的新特性非常紧贴Java新版本/新特性,即便这个新特性仅仅是
Preview Feature。 - 深刻理解Java新版本/新特性,有助于理解
Spring Framework的新特性以及它的市场规划。