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.core
、spring.context
等)。
这些 jar 遵循相同的命名模式,使用 -
而不是 .
—— 例如,spring-core
和 spring-context
。
当然,Spring Framework 的 jar 在 classpath 上也能正常工作。
Spring 和 Spring Framework 的历史
Spring 诞生于 2003 年,旨在应对早期 J2EE 规范的复杂性。 虽然有些人认为 Java EE 及其现代继任者 Jakarta EE 与 Spring 存在竞争,但它们实际上是互补的。 Spring 编程模型不接受 Jakarta EE 平台规范;相反,它集成了传统 EE 伞形下的精选单个规范:
Spring Framework 还支持 Dependency Injection
(JSR 330) 和 Common Annotations
(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 和 Undertow 2.3 作为 Web 服务器,
以及 Hibernate ORM 6.1。
随着时间的推移,Java/Jakarta EE 在应用程序开发中的作用已经演变。 在 J2EE 和 Spring 的早期,应用程序是为了部署到应用服务器而创建的。 如今,在 Spring Boot 的帮助下,应用程序以一种适合开发运维和云环境的方式创建, 嵌入了 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 组合中您可能在解决特定问题时需要考虑的其他项目。