Spring 使创建 Java 企业应用程序变得容易。它提供了在企业环境中采用 Java 语言所需的一切,支持将 Groovy 和 Kotlin 作为 JVM 上的替代语言,并且可以根据应用程序的需要灵活地创建多种架构。从 Spring Framework 5.1 开始,Spring 需要 JDK 8+ (Java SE 8+) 并为 JDK 11 LTS 提供开箱即用的支持。建议 Java SE 8 update 60 作为 Java 8 的最低补丁版本,但通常建议使用最近的补丁版本。
Spring 支持广泛的应用场景。在大型企业中,应用程序往往存在很长时间,并且必须运行在 JDK 和应用服务器上,其升级周期超出了开发人员的控制范围。其他人可能作为嵌入服务器的单个 jar 运行,可能在云环境中。还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring 是开源的。它有一个庞大而活跃的社区,可以根据各种实际用例提供持续的反馈。这帮助 Spring 在很长一段时间内成功发展。
1. 我们所说的“Spring”是什么意思
“Spring”一词在不同的上下文中意味着不同的事物。它可以用来指代 Spring Framework 项目本身,这就是一切的开始。随着时间的推移,其他 Spring 项目已经建立在 Spring Framework 之上。大多数情况下,当人们说“Spring”时,他们指的是整个项目系列。本参考文档侧重于基础:Spring 框架本身。
Spring 框架分为模块。应用程序可以选择他们需要的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework 还为不同的应用程序架构提供了基础支持,包括消息传递、事务数据和持久性以及 Web。它还包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 反应式 Web 框架。
关于模块的说明:Spring 的框架 jar 允许部署到 JDK 9 的模块路径(“Jigsaw”)。为了在支持 Jigsaw 的应用程序中使用,Spring Framework 5 jar 带有“Automatic-Module-Name”清单条目,这些条目定义了独立于jar 工件名称(jar 遵循相同的命名模式,用“-”而不是“.”,例如“spring-core”和“spring-context”)。当然,Spring 的框架 jar 在 JDK 8 和 9+ 上的类路径上都可以正常工作。
2. Spring 和 Spring 框架的历史
Spring 于 2003 年应运而生,以应对早期 J2EE规范的复杂性。虽然有些人认为 Java EE 和 Spring 在竞争,但 Spring 实际上是对 Java EE 的补充。Spring 编程模型不包含 Java EE 平台规范;相反,它集成了从 EE 保护伞中精心挑选的各个规格:
从 Spring Framework 5.0 开始,Spring 至少需要 Java EE 7 级别(例如 Servlet 3.1+、JPA 2.1+),同时在 Java EE 8 级别提供与较新 API 的开箱即用集成(例如 Servlet 4.0、JSON Binding API)在运行时遇到。这使 Spring 与例如 Tomcat 8 和 9、WebSphere 9 和 JBoss EAP 7 完全兼容。
随着时间的推移,Java EE 在应用程序开发中的作用发生了变化。在 Java EE 和 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。
3.设计理念
当你了解一个框架时,重要的是不仅要知道它做了什么,而且要知道它遵循什么原则。以下是 Spring Framework 的指导原则:
-
提供每个级别的选择。Spring 允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久性提供程序,而无需更改代码。许多其他基础设施问题以及与第三方 API 的集成也是如此。
-
容纳不同的观点。Spring 拥抱灵活性,并且不会对事情应该如何做固执己见。它以不同的视角支持广泛的应用需求。
-
保持强大的向后兼容性。Spring 的演变经过精心管理,在版本之间几乎没有发生重大变化。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以方便维护依赖于 Spring 的应用程序和库。
-
关心 API 设计。Spring 团队投入大量精力和时间来制作直观且可跨多个版本和多年使用的 API。
-
为代码质量设定高标准。Spring 框架非常强调有意义的、最新的和准确的 javadoc。它是极少数可以声称代码结构清晰且包之间没有循环依赖关系的项目之一。
4. 反馈和贡献
对于操作方法问题或诊断或调试问题,我们建议使用 Stack Overflow。单击 此处 获取在 Stack Overflow 上使用的建议标签列表。如果您相当确定 Spring 框架中存在问题或想要提出功能建议,请使用GitHub 问题。
If you have a solution in mind or a suggested fix, you can submit a pull request on Github. However, please keep in mind that, for all but the most trivial issues, we expect a ticket to be filed in the issue tracker, where discussions take place and leave a record for future reference.
For more details see the guidelines at the CONTRIBUTING, top-level project page.
5. Getting Started
如果您刚刚开始使用 Spring,您可能希望通过创建基于Spring Boot的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且自以为是)的方式来创建可用于生产的基于 Spring 的应用程序。它基于 Spring 框架,支持约定优于配置,旨在让您尽快启动和运行。
You can use start.spring.io to generate a basic project or follow one of the "Getting Started" guides, such as Getting Started Building a RESTful Web Service. As well as being easier to digest, these guides are very task focused, and most of them are based on Spring Boot. They also cover other projects from the Spring portfolio that you might want to consider when solving a particular problem.