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 Framework 之上。大多数情况下,当人们说“Spring”时,指的是整个项目家族。本参考文档重点介绍基础:Spring Framework 本身。

Spring Framework 被划分为多个模块。应用程序可以选择它们需要的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework 为不同的应用程序架构提供了基础支持,包括消息传递、事务性数据和持久性以及 Web。它还包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 反应式 Web 框架。

关于模块的说明: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 和 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 框架 6.0 开始,Spring 已升级到 Jakarta EE 9 级别 (例如 Servlet 5.0+,JPA 3.0+),基于 jakarta 命名空间,而不是传统的 javax 包。由于 EE 9 作为最低要求,并且 EE 10 已经得到支持,Spring 已经准备好为 Jakarta EE API 的进一步发展提供开箱即用的支持。Spring 框架 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 框架 5 开始,WebFlux 应用程序甚至不直接使用 Servlet API,并且可以在非 Servlet 容器(如 Netty)上运行。

Spring 继续创新和发展。除了 Spring 框架之外,还有其他项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。重要的是要记住,每个项目都有自己的源代码仓库、问题跟踪器和发布节奏。请访问 spring.io/projects 查看完整的 Spring 项目列表。

设计理念

当您学习一个框架时,了解它不仅做什么,还了解它遵循什么原则非常重要。以下是 Spring 框架的指导原则:

  • 在每个级别提供选择。Spring 允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久化提供程序,而无需更改代码。对于许多其他基础设施问题和与第三方 API 的集成,也是如此。

  • 适应不同的视角。Spring 拥抱灵活性,并且对事情应该如何完成没有意见。它支持各种应用程序需求,并具有不同的视角。

  • 保持强大的向后兼容性。Spring 的演变经过精心管理,以强制在版本之间进行很少的重大更改。Spring 支持精心选择的 JDK 版本和第三方库范围,以方便维护依赖于 Spring 的应用程序和库。

  • 关心 API 设计。Spring 团队投入了大量精力和时间来创建直观的 API,这些 API 在多个版本和多年内都能保持良好状态。

  • 为代码质量设定高标准。Spring 框架非常重视有意义、最新和准确的 javadoc。它是为数不多的几个项目之一,可以声称代码结构清晰,包之间没有循环依赖关系。

反馈和贡献

对于如何操作问题或诊断或调试问题,我们建议使用 Stack Overflow。点击 这里 查看在 Stack Overflow 上使用的建议标签列表。如果您非常确定 Spring 框架存在问题,或者想建议一个功能,请使用 GitHub Issues

如果您有解决方案或建议的修复方法,您可以在 Github 上提交拉取请求。但是,请记住,对于除最琐碎的问题之外的所有问题,我们希望在问题跟踪器中提交一个工单,在那里进行讨论并留下记录以供将来参考。

有关更多详细信息,请参阅 CONTRIBUTING 中的指南,位于顶级项目页面。

入门

如果您刚开始使用 Spring,您可能希望通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且有见地的)方法来创建可用于生产环境的基于 Spring 的应用程序。它基于 Spring 框架,优先考虑约定优于配置,旨在让您尽快启动并运行。

您可以使用 start.spring.io 生成一个基本项目,或者遵循其中一个 "入门"指南,例如 构建 RESTful Web 服务入门。这些指南不仅更容易理解,而且非常注重任务,并且大多数基于 Spring Boot。它们还涵盖了 Spring 产品组合中的其他项目,您可能希望在解决特定问题时考虑这些项目。