Spring 于 2003 年应运而生,以应对早期 J2EE 规范的复杂性。虽然有些人认为 Java EE 及其现代的继承者 Jakarta EE 与 Spring 之间是竞争关系,但是实际上它们是相互补充的。 Spring 编程模型不包含 Jakarta EE 平台规范;相反,它集成了从传统 EE 综合体中精心挑选的各个规格:

    • Servlet 小服务程序 API(JSR 340
    • WebSocket API(JSR 356
    • 并发实用程序(JSR 236
    • JSON 绑定 API(JSR 367
    • Bean 校验(JSR 303
    • JPA(JSR 338
    • JMS(JSR 914
    • 以及用于事务协调的 JTA/JCA 设置(如有必要)。

    Spring 框架还支持依赖注入(JSR 330)和通用注解(JSR 250)规范,应用程序开发人员可以选择使用它们来代替 Spring 框架提供的特定于 Spring 的机制。最初,它们基于常见的javax包。

    Spring 框架从 6.0 版本开始,已经升级到了 Jakarta EE 9 标准(例如 Servlet 5.0+、JPA 3.0+),它基于jakarta命名空间而不是传统的javax包。以 EE 9 为最低要求,一旦可用,Spring 准备为 EE 10+ 中的进一步 API 演进提供开箱即用的支持。这使得 Spring 框架 6.x 版本与如 Tomcat 10+ 和 Jetty 11+ 等完全兼容。

    随着时间的推移,Java/Jakarta EE 在应用程序开发中的作用发生了变化。在 J2EE 和 Spring 的早期,创建应用程序是为了部署到应用程序服务器。今天,在 Spring Boot 的帮助下,应用程序以一种对 devops 和云友好的方式创建,其中嵌入了 Servlet 容器并且易于更改。Spring 框架从 5.x 版本开始,WebFlux 应用程序甚至不直接使用 Servlet API,并且可以在不是 Servlet 容器的服务器(例如 Netty)上运行。

    Spring 在不断地创新和发展中。在 Spring 框架之上,还有其他的项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。重要的是要记住,每个项目都有自己的源代码存储库、问题跟踪器和发布节奏。有关 Spring 项目的完整列表,请参阅 spring.io/projects