Spring Framework 概述

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 Framework 的 jar 包允许部署到模块路径(Java 模块系统)。为了在启用模块的应用程序中使用,Spring Framework 的 jar 包附带 Automatic-Module-Name 清单条目,这些条目定义了独立于 jar 包名称的稳定语言级模块名称(spring.corespring.context 等)。这些 jar 包遵循相同的命名模式,用 - 代替 . —— 例如,spring-corespring-context。当然,Spring Framework 的 jar 包在类路径上也能正常工作。

Spring 和 Spring Framework 的历史

Spring 诞生于 2003 年,旨在应对早期 J2EE 规范的复杂性。 虽然有些人认为 Java EE 及其现代继承者 Jakarta EE 与 Spring 存在竞争,但它们实际上是互补的。Spring 编程模型不包含 Jakarta EE 平台规范;相反,它与传统 EE 伞形下的精选独立规范集成:

Spring Framework 还支持依赖注入 (JSR 330) 和通用注解 (JSR 250) 规范,应用程序 开发人员可以选择使用这些规范,而不是 Spring Framework 提供的 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 作为 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.io/projects 获取 Spring 项目的完整列表。

设计理念

当你学习一个框架时,不仅要知道它做什么,还要知道它遵循什么原则,这很重要。以下是 Spring Framework 的指导原则:

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

  • 适应不同的视角。Spring 拥抱灵活性,不固执于事情应该如何完成。它支持具有不同视角的广泛应用程序需求。

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

  • 关注 API 设计。Spring 团队投入大量思考和时间来创建直观且在多个版本和多年中都能保持一致的 API。

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

反馈和贡献

对于操作方法问题或诊断或调试问题,我们建议使用 Stack Overflow。点击 此处 获取 Stack Overflow 上建议使用的标签列表。如果你相当确定 Spring Framework 中存在问题或想建议一项功能,请使用 GitHub Issues

如果你有解决方案或建议的修复,可以在 Github 上提交拉取请求。但是,请记住 除了最微不足道的问题,我们都希望在问题跟踪器中提交一个工单,在那里进行讨论并留下记录以供将来参考。

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

入门

如果你刚开始使用 Spring,你可能希望通过创建一个 Spring Boot 应用程序来开始使用 Spring Framework。Spring Boot 提供了一种快速(且有主见)的方式来创建生产就绪的基于 Spring 的应用程序。它基于 Spring Framework,倾向于约定优于配置,旨在让你尽快启动并运行。

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