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

image-20230128153953141

1.版本里程碑

2个GA版本

  • 2022-11,发布Spring Framework 6.0 GA

    • Spring Framework 6.0 GA配套Java 17/18/19
    • 匹配Spring Boot 3.0&3.1
  • 2023-07,发布Spring Framework 6.1 GA

    • Spring Framework 6.1 GA配套Java 17/18/19/20/21
    • 匹配Spring Boot 3.2&3.3

    image-20230128165742669

  • 详细日程表

image-20230128170617815

6.x vs 5.3.x

Spring Framework 5.3.xSpring Framework 6.x
Java版本Java 8/11/17Java 17+
Java EE版本Java EE 7/8(javax namespace)Jakarta EE 9/10(jakarta namespace)
命令式编程模型响应式编程模型新增继承
配套Spring BootSpring Boot 2.7.xSpring 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 8Jakarta EE 9的升级,也会对Spring Framework产生影响:

  • Servlet API 5.0javax.servlet变为jakarta.servlet
    • 基于Servlet API 5.0/6.0的Web容器:
      • Tomcat 10.0/10.1
      • Jetty 11/12
      • Undertow 2.3
  • JPA 3.0javax.persistence变为jakarta.persistence
    • 基于JPA 3.0/3.1ORMValidator
      • Hibernate ORM 6.1
      • Hibernate Validator 7.0/8.0

4.AOT对Spring Framework的影响

伴随Java17AOT的关注和支持,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的新特性以及它的市场规划。