包含:历史、设计理念、反馈、入门。

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 在很长一段时间内成功发展。

我们所说的 Spring 是什么意思

术语 「Spring」在不同的语境中意味着不同的东西。它可以用来指代 Spring 框架项目本身,它是一切的开始。随着时间的推移,其他 Spring 项目也被建立在 Spring 框架之上。大多数时候,当人们说 「Spring」时,他们指的是整个项目家族。这个参考文档的重点是基础:Spring 框 架本身。

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

关于模块的说明。Spring 的框架 jars 允许部署到 JDK 9 的模块路径(Jigsaw)。为了在支持 Jigsaw 的应用程序中使用,Spring Framework 5 的 jars 带有 Automatic-Module-Name清单项,它定义了独立于 jar 工件名称的稳定的语言级模块名称(spring.corespring.context等)(jars 遵循相同的命名模式,以 -代替 .,例如 spring-corespring-context)。当然,Spring 的框架 jars 在 JDK 8 和 9+ 的 classpath 上都保持正常工作。

Spring 和 Spring 框架的历史

作为对早期 J2EE 规范的复杂性的回应,Spring 于 2003 年诞生了。虽然有些人认为 Java EE 和 Spring 是竞争关系,但事实上,Spring 是对Java EE 的补充。Spring 编程模型并不拥抱 Java EE 平台规范;相反,它与 EE 伞中精心挑选的个别规范相整合:

Spring 框架还支持依赖注入(JSR 330)和通用注解(JSR 250)规范,应用程序开发人员可以选择使用这些规范来代替 Spring 框架提供的 Spring 特定机制。

从 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 的帮助下,应用程序是以一种对开发者和云计算友好的方式创建的,Servlet 容器被嵌入其中,并且易于改变。从 Spring Framework 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 上提交一个 pull request(PR)。然而,请记住,除了最微不足道的问题,我们希望在问题跟踪器中提交一个票据,在那里进行讨论,并留下记录供将来参考。

更多的细节,请参见贡献,顶层项目页面的 指导方针

入门

如果你刚刚开始使用 Spring,你可能想通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(和意见)的方式来创建一个生产就绪的基于 Spring 的应用程序。它以 Spring 框架为基础,更倾向于约定俗成的配置,旨在让你尽快启动和运行。

你可以使用 start.spring.io 来生成一个基本项目,或者按照 入门指南 来做,比如《开始构建 RESTful Web 服务》。这些指南除了更容易消化之外,还非常注重任务,而且大部分都是基于 Spring Boot 的。它们也涵盖了 Spring 组合中的其他项目,在解决特定问题时,你可能要考虑这些项目。