Spring 使创建 Java 企业应用程序变得容易。它为您提供了一切 需要在企业环境中采用 Java 语言,并支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并可以灵活地创建许多 各种体系结构取决于应用程序的需要。从 Spring Framework 5.1 开始, Spring 需要 JDK 8+ (Java SE 8+),并为 JDK 11 LTS 提供开箱即用的支持。 建议将 Java SE 8 更新 60 作为 Java 8 的最低补丁版本,但它确实是 通常建议使用最新的补丁版本。

Spring 支持广泛的应用场景。在大型企业中,应用程序 通常存在很长时间,并且必须在升级的 JDK 和应用程序服务器上运行 周期超出了开发人员的控制范围。其他的可以作为嵌入服务器的单个 jar 运行, 可能在云环境中。还有一些可能是独立的应用程序(例如批处理 或不需要服务器的集成工作负载)。

Spring 是开源的。它有一个庞大而活跃的社区,提供持续的反馈 基于各种真实世界的用例。这帮助 Spring 成功 在很长一段时间内演变。

1. 我们所说的“春天”是什么意思

“春天”一词在不同的语境中有不同的含义。它可以用来指代 Spring Framework 项目本身,这是一切的开始。随着时间的流逝,其他春天 项目是建立在 Spring Framework 之上的。大多数情况下,当人们说 “春天”,它们意味着整个项目系列。本参考文档重点介绍 基础:Spring Framework 本身。

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

关于模块的说明:Spring 的框架 jar 允许部署到 JDK 9 的模块路径 (“拼图”)。为了在支持 Jigsaw 的应用程序中使用,Spring Framework 5 jar 附带了 “Automatic-Module-Name”清单条目,用于定义稳定的语言级模块名称 (“spring.core”、“spring.context”等)独立于 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 还支持依赖注入 (JSR 330) 和公共注解 (JSR 250) 规范,应用程序开发人员 可以选择使用 Spring 框架提供的特定于 Spring 的机制来代替。

从 Spring Framework 5.0 开始,Spring 需要 Java EE 7 级别(例如 Servlet 3.1+、JPA 2.1+) 最低限度 - 同时提供与较新 API 的开箱即用集成 在运行时遇到 Java EE 8 级别(例如 Servlet 4.0、JSON 绑定 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 Framework 之外,还有其他 项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch、 除其他外。重要的是要记住,每个项目都有自己的源代码存储库, 问题跟踪器和发布节奏。查看 spring.io/projects Spring 项目的完整列表。

3. 设计理念

When you learn about a framework, it’s important to know not only what it does but what principles it follows. Here are the guiding principles of the Spring Framework:

  • Provide choice at every level. Spring lets you defer design decisions as late as possible. For example, you can switch persistence providers through configuration without changing your code. The same is true for many other infrastructure concerns and integration with third-party APIs.

  • Accommodate diverse perspectives. Spring embraces flexibility and is not opinionated about how things should be done. It supports a wide range of application needs with different perspectives.

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

  • 关心 API 设计。Spring 团队在制作 API 上投入了大量的心思和时间 这些都是直观的,并且在许多版本和许多年中都站得住脚。

  • 为代码质量设定高标准。Spring Framework 非常强调 有意义、最新且准确的 Javadoc。这是为数不多的可以声称的项目之一 干净的代码结构,包之间没有循环依赖关系。

4. 反馈和贡献

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

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

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

5. 入门

如果您刚刚开始使用 Spring,您可能希望开始使用 Spring 通过创建基于 Spring Boot 的框架 应用。Spring Boot 提供了一种快速(且自以为是)的方法来创建一个 生产就绪的基于 Spring 的应用程序。它基于 Spring Framework,有利于 约定优先于配置,旨在让您快速启动和运行 尽可能。

您可以使用 start.spring.io 生成一个基本项目或关注 “入门”指南之一,例如开始构建 RESTful Web 服务。 除了更容易消化之外,这些指南还非常注重任务,其中大多数 基于 Spring Boot。它们还涵盖了 Spring 投资组合中的其他项目,这些项目 在解决特定问题时,您可能需要考虑。