概述
1. 我们所说的
“Spring”一词在不同上下文中具有不同的含义。它可以指代Spring Framework项目本身,这是所有内容的起点。随着时间推移,其他Spring项目在此基础之上构建起来。大多数情况下,当人们提到“Spring”时,指的是整个项目家族。本参考文档聚焦于基础部分:即Spring Framework本身。
Spring Framework 被划分为多个模块。应用程序可以根据需要选择使用哪些模块。 其核心是核心容器模块,包括一个配置模型和依赖注入机制。除此之外,Spring Framework 还为不同的应用架构提供了基础支持,包括消息传递、事务性数据与持久化以及 Web 功能。它同时包含基于 Servlet 的 Spring MVC Web 框架,以及并行的响应式 Web 框架 Spring WebFlux。
关于模块的一点说明:Spring 框架的 JAR 文件支持部署到 JDK 9 的模块路径(“Jigsaw”)。为了在启用 Jigsaw 的应用程序中使用,Spring Framework 5 的 JAR 文件包含了“Automatic-Module-Name”清单条目,这些条目定义了稳定的语言级模块名称(如 “spring.core”、“spring.context” 等),与 JAR 构件名称无关(JAR 文件采用相同的命名模式,但使用“-”代替“.”,例如 “spring-core” 和 “spring-context”)。 当然,Spring 框架的 JAR 文件在 JDK 8 和 JDK 9+ 的类路径下依然可以正常工作。
2. Spring 与 Spring 框架的历史
Spring 诞生于 2003 年,旨在应对早期 J2EE 规范的复杂性。 尽管有些人认为 Java EE 与 Spring 存在竞争关系,但实际上 Spring 与 Java EE 是互补的。 Spring 编程模型并不全盘采纳 Java EE 平台规范; 相反,它有选择地集成 Java 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 框架的指导原则:
-
在每个层级都提供选择。Spring 允许你尽可能推迟设计决策。 例如,你可以通过配置切换持久化提供者,而无需更改代码。 对于许多其他基础设施问题以及与第三方 API 的集成,也是如此。
-
包容多元视角。Spring 拥抱灵活性,对于如何做事并无强制主张。它支持从不同视角出发的广泛应用需求。
-
保持强大的向后兼容性。Spring 的演进经过精心管理,以尽量减少各版本之间的破坏性变更。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以便于维护依赖 Spring 的应用程序和库。
-
注重 API 设计。Spring 团队投入了大量心思和时间,致力于打造直观且经得起多年、多版本考验的 API。
-
为代码质量设定高标准。Spring 框架非常重视有意义、及时且准确的 Javadoc。它是极少数能够做到代码结构清晰、包之间无循环依赖的项目之一。
4. 反馈与贡献
对于如何操作的问题,或诊断、调试相关的问题,我们建议使用 Stack Overflow。点击这里查看在 Stack Overflow 上推荐使用的标签列表。如果您相当确定 Spring Framework 中存在某个问题,或者希望提出新功能建议,请使用GitHub Issues。
如果您已有解决方案或建议的修复方式,可以在Github上提交拉取请求(pull request)。但请注意,除了最简单的问题外,我们期望您先在问题跟踪系统中创建一个工单(ticket),以便进行讨论并为将来留下可查阅的记录。
有关更多详情,请参阅顶级项目页面上的 CONTRIBUTING 指南。
5. 快速入门
如果你刚刚开始使用 Spring,可以通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且有主见的)方式来创建一个可用于生产环境的基于 Spring 的应用程序。它建立在 Spring 框架之上,推崇约定优于配置,并旨在让你尽快启动并运行起来。
您可以使用 start.spring.io 生成一个基础项目,或者参考其中一个 “入门指南”,例如 构建 RESTful Web 服务入门。 这些指南不仅更易于理解,而且以具体任务为导向,其中大多数都基于 Spring Boot。此外,它们还涵盖了 Spring 技术栈中的其他项目, 当您解决特定问题时可以考虑使用。