|
对于最新稳定版本,请使用 Spring Framework 7.0.6! |
Spring 框架概述
Spring 使得创建 Java 企业级应用变得轻而易举。它为你在企业环境中使用 Java 语言提供了所需的一切支持,同时支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并可根据应用程序的需求灵活构建多种架构。从 Spring Framework 6.0 起,Spring 要求使用 Java 17 或更高版本。
Spring 支持广泛的应用场景。在大型企业中,应用程序通常需要长期存在,并且必须运行在 JDK 和应用服务器上,而这些环境的升级周期往往不受开发人员控制。另一些应用则可能以内嵌服务器的方式作为单个 JAR 文件运行,可能部署在云环境中。还有一些可能是独立应用程序(例如批处理或集成工作负载),无需服务器即可运行。
Spring 是开源的。它拥有一个庞大且活跃的社区,该社区基于各种真实世界的使用场景持续提供反馈。这使得 Spring 能够在很长一段时间内成功地不断演进。
我们所说的"Spring"是指什么
“Spring”一词在不同上下文中具有不同的含义。它可以指代Spring Framework项目本身,这是所有内容的起点。随着时间推移,其他Spring项目在此基础之上构建起来。大多数情况下,当人们提到“Spring”时,指的是整个项目家族。本参考文档聚焦于基础部分:即Spring Framework本身。
Spring Framework 被划分为多个模块。应用程序可以根据需要选择使用哪些模块。 其核心是核心容器模块,包括一个配置模型和依赖注入机制。除此之外,Spring Framework 还为不同的应用架构提供了基础支持,包括消息传递、事务性数据与持久化以及 Web 功能。它同时包含基于 Servlet 的 Spring MVC Web 框架,以及并行的响应式 Web 框架 Spring WebFlux。
关于模块的说明:Spring 框架的 JAR 包支持部署到 JDK 9 的模块路径(“Jigsaw”)。为了在启用 Jigsaw 的应用程序中使用,Spring Framework 5 的 JAR 包包含了 “Automatic-Module-Name” 清单条目,这些条目定义了与 JAR 构件名称无关的稳定语言级模块名称(例如 “spring.core”、“spring.context” 等)。(这些 JAR 文件遵循相同的命名模式,只是使用 “-” 而非 “.”,例如 “spring-core” 和 “spring-context”。)当然,Spring 框架的 JAR 包在 JDK 8 和 JDK 9+ 的类路径下依然可以正常工作。
Spring 和 Spring Framework 的历史
Spring 诞生于 2003 年,旨在应对早期 J2EE 规范的复杂性。 尽管有些人认为 Java EE 及其现代继任者 Jakarta EE 与 Spring 存在竞争关系,但实际上它们是互补的。Spring 编程模型并不完全采纳 Jakarta EE 平台规范;相反,它与传统 EE 体系中经过精心挑选的个别规范进行集成:
Spring 框架还支持依赖注入(JSR 330)和通用注解(JSR 250)规范,应用程序开发人员可以选择使用这些规范,而不是 Spring 框架提供的 Spring 特有机制。最初,这些规范基于通用的 javax 包。
自 Spring Framework 6.0 起,Spring 已升级至 Jakarta EE 9 级别
(例如 Servlet 5.0+、JPA 3.0+),并基于 jakarta 命名空间,而非传统的 javax 包。
以 EE 9 为最低要求并已支持 EE 10,Spring 已做好准备,为 Jakarta EE API 的进一步演进提供开箱即用的支持。
Spring Framework 6.0 完全兼容 Tomcat 10.1、Jetty 11 和 Undertow 2.3 作为 Web 服务器,同时也兼容 Hibernate ORM 6.1。
随着时间的推移,Java/Jakarta EE 在应用程序开发中的角色不断演变。在 J2EE 和 Spring 的早期阶段,应用程序是为部署到应用服务器而创建的。如今,借助 Spring Boot,应用程序以 DevOps 友好和云原生的方式构建,内嵌了 Servlet 容器,并且可以轻松更换。从 Spring Framework 5 开始,WebFlux 应用程序甚至不再直接使用 Servlet API,而可以在非 Servlet 容器的服务器(例如 Netty)上运行。
Spring 持续创新并不断发展。除了 Spring Framework 之外,还有其他项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。需要记住的是,每个项目都有自己的源代码仓库、问题跟踪系统和发布节奏。完整的 Spring 项目列表请参见 spring.io/projects。
设计理念
当你学习一个框架时,不仅要了解它的功能,还要了解它所遵循的原则。以下是 Spring 框架的指导原则:
-
在每个层级都提供选择。Spring 允许你尽可能推迟设计决策。 例如,你可以通过配置切换持久化提供者,而无需更改代码。 对于许多其他基础设施问题以及与第三方 API 的集成,也是如此。
-
包容多元视角。Spring 拥抱灵活性,对于如何做事并无强制主张。它支持从不同视角出发的广泛应用需求。
-
保持强大的向后兼容性。Spring 的演进经过精心管理,以尽量减少各版本之间的破坏性变更。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以便于维护依赖 Spring 的应用程序和库。
-
注重 API 设计。Spring 团队投入了大量心思和时间,致力于打造直观且经得起多年、多版本考验的 API。
-
为代码质量设定高标准。Spring 框架非常重视有意义、及时且准确的 Javadoc。它是极少数能够做到代码结构清晰、包之间无循环依赖的项目之一。
反馈和贡献
对于如何操作的问题,或诊断、调试相关的问题,我们建议使用 Stack Overflow。点击这里查看在 Stack Overflow 上推荐使用的标签列表。如果您相当确定 Spring Framework 中存在某个问题,或者希望提出新功能建议,请使用GitHub Issues。
如果您已有解决方案或建议的修复方式,可以在Github上提交拉取请求(pull request)。但请注意,除了最简单的问题外,我们期望您先在问题跟踪系统中创建一个工单(ticket),以便进行讨论并为将来留下可查阅的记录。
更多详情请参见顶级项目页面上的CONTRIBUTING指南。
快速开始
如果你刚刚开始使用 Spring,可以通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且有主见的)方式来创建一个可用于生产环境的基于 Spring 的应用程序。它建立在 Spring 框架之上,推崇约定优于配置,并旨在让你尽快启动并运行起来。
您可以使用 start.spring.io 生成一个基础项目,或者参考其中一个 “入门指南”,例如 构建 RESTful Web 服务入门。 这些指南不仅更易于理解,而且以具体任务为导向,其中大多数都基于 Spring Boot。此外,它们还涵盖了 Spring 技术栈中的其他项目, 当您解决特定问题时可以考虑使用。