概述

1. 我们所说的

“Spring”一词在不同上下文中具有不同的含义。它可以指代Spring Framework项目本身,这是所有内容的起点。随着时间推移,其他Spring项目在此基础之上构建起来。大多数情况下,当人们提到“Spring”时,指的是整个项目家族。本参考文档聚焦于基础部分:即Spring Framework本身。spring-doc.cadn.net.cn

Spring Framework 被划分为多个模块。应用程序可以根据需要选择使用哪些模块。 其核心是核心容器模块,包括一个配置模型和依赖注入机制。除此之外,Spring Framework 还为不同的应用架构提供了基础支持,包括消息传递、事务性数据与持久化以及 Web 功能。它同时包含基于 Servlet 的 Spring MVC Web 框架,以及并行的响应式 Web 框架 Spring WebFlux。spring-doc.cadn.net.cn

关于模块的一点说明: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+ 的类路径下依然可以正常工作。spring-doc.cadn.net.cn

2. Spring 与 Spring 框架的历史

Spring 诞生于 2003 年,旨在应对早期 J2EE 规范的复杂性。 尽管有些人认为 Java EE 与 Spring 存在竞争关系,但实际上 Spring 与 Java EE 是互补的。 Spring 编程模型并不全盘采纳 Java EE 平台规范; 相反,它有选择地集成 Java EE 体系中特定的个别规范:spring-doc.cadn.net.cn

Spring 框架还支持依赖注入(JSR 330)和通用注解(JSR 250)规范,应用程序开发者可以选择使用这些规范,而不是 Spring 框架提供的 Spring 特有机制。spring-doc.cadn.net.cn

从 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 等应用服务器。spring-doc.cadn.net.cn

随着时间的推移,Java EE 在应用程序开发中的角色不断演变。在 Java EE 和 Spring 的早期阶段,应用程序是为部署到应用服务器而创建的。 如今,借助 Spring Boot,应用程序以 DevOps 友好和云原生的方式构建,内嵌了 Servlet 容器,并且可以轻松更换。 从 Spring Framework 5 开始,WebFlux 应用程序甚至不再直接使用 Servlet API, 并可在非 Servlet 容器的服务器(例如 Netty)上运行。spring-doc.cadn.net.cn

Spring 持续创新并不断发展。除了 Spring Framework 之外,还有其他项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。需要记住的是,每个项目都有自己的源代码仓库、问题跟踪系统和发布节奏。完整的 Spring 项目列表请参见 spring.io/projectsspring-doc.cadn.net.cn

3. 设计理念

当你学习一个框架时,不仅要了解它的功能,还要了解它所遵循的原则。以下是 Spring 框架的指导原则:spring-doc.cadn.net.cn

  • 在每个层级都提供选择。Spring 允许你尽可能推迟设计决策。 例如,你可以通过配置切换持久化提供者,而无需更改代码。 对于许多其他基础设施问题以及与第三方 API 的集成,也是如此。spring-doc.cadn.net.cn

  • 包容多元视角。Spring 拥抱灵活性,对于如何做事并无强制主张。它支持从不同视角出发的广泛应用需求。spring-doc.cadn.net.cn

  • 保持强大的向后兼容性。Spring 的演进经过精心管理,以尽量减少各版本之间的破坏性变更。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以便于维护依赖 Spring 的应用程序和库。spring-doc.cadn.net.cn

  • 注重 API 设计。Spring 团队投入了大量心思和时间,致力于打造直观且经得起多年、多版本考验的 API。spring-doc.cadn.net.cn

  • 为代码质量设定高标准。Spring 框架非常重视有意义、及时且准确的 Javadoc。它是极少数能够做到代码结构清晰、包之间无循环依赖的项目之一。spring-doc.cadn.net.cn

4. 反馈与贡献

对于如何操作的问题,或诊断、调试相关的问题,我们建议使用 Stack Overflow。点击这里查看在 Stack Overflow 上推荐使用的标签列表。如果您相当确定 Spring Framework 中存在某个问题,或者希望提出新功能建议,请使用GitHub Issuesspring-doc.cadn.net.cn

如果您已有解决方案或建议的修复方式,可以在Github上提交拉取请求(pull request)。但请注意,除了最简单的问题外,我们期望您先在问题跟踪系统中创建一个工单(ticket),以便进行讨论并为将来留下可查阅的记录。spring-doc.cadn.net.cn

有关更多详情,请参阅顶级项目页面上的 CONTRIBUTING 指南。spring-doc.cadn.net.cn

5. 快速入门

如果你刚刚开始使用 Spring,可以通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且有主见的)方式来创建一个可用于生产环境的基于 Spring 的应用程序。它建立在 Spring 框架之上,推崇约定优于配置,并旨在让你尽快启动并运行起来。spring-doc.cadn.net.cn

您可以使用 start.spring.io 生成一个基础项目,或者参考其中一个 “入门指南”,例如 构建 RESTful Web 服务入门。 这些指南不仅更易于理解,而且以具体任务为导向,其中大多数都基于 Spring Boot。此外,它们还涵盖了 Spring 技术栈中的其他项目, 当您解决特定问题时可以考虑使用。spring-doc.cadn.net.cn