Spring 使得创建 Java 企业应用程序变得简单。它提供了在企业环境中使用 Java 语言所需的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并具有根据应用程序需求创建多种架构的灵活性。从 Spring Framework 5.1 开始,Spring 需要 JDK 8+(Java SE 8+),并提供对 JDK 11 LTS 的开箱即用支持。建议 Java 8 的最低补丁版本为 Java SE 8 更新 60,但通常建议使用最近的补丁版本。
Spring 支持广泛的应用场景。在大型企业中,应用程序通常存在很长时间,并且必须在开发人员无法控制的 JDK 和应用服务器的升级周期上运行。其他应用程序可能作为嵌入服务器的单个 jar 运行,可能在云环境中。还有一些可能是独立应用程序(例如批处理或集成工作负载),不需要服务器。
Spring 是开源的。它拥有一个庞大而活跃的社区,基于多样化的真实使用案例提供持续反馈。这帮助 Spring 在很长一段时间内成功演变。
1. 我们所说的“春天”
“Spring”这个术语在不同的上下文中有不同的含义。它可以用来指代 Spring Framework 项目本身,这就是一切的起点。随着时间的推移,其他 Spring 项目在 Spring Framework 之上构建。通常,当人们说“Spring”时,他们指的是整个项目家族。此参考文档专注于基础:Spring Framework 本身。
Spring 框架被划分为多个模块。应用程序可以选择所需的模块。核心容器的模块是核心,包括配置模型和依赖注入机制。除此之外,Spring 框架为不同的应用程序架构提供基础支持,包括消息传递、事务数据和持久性以及 Web。它还包括基于 Servlet 的 Spring MVC Web 框架,以及并行的 Spring WebFlux 响应式 Web 框架。
关于模块的说明:Spring 的框架 jar 允许部署到 JDK 9 的模块路径(“Jigsaw”)。为了在启用 Jigsaw 的应用程序中使用,Spring Framework 5 的 jar 包带有“Automatic-Module-Name”清单条目,这些条目定义了与 jar 工件名称无关的稳定语言级模块名称(“spring.core”、“spring.context”等)。这些 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 框架下精心挑选的单个规范集成。
-
Servlet API (JSR 340)
-
WebSocket API (JSR 356) -
并发工具 (JSR 236) -
JSON 绑定 API (JSR 367) -
Bean Validation (JSR 303) -
JPA (JSR 338)
-
JMS(JSR 914)
-
以及必要时的 JTA/JCA 设置用于事务协调。
Spring 框架还支持依赖注入(JSR 330)和通用注解(JSR 250)规范,应用程序开发人员可以选择使用这些规范,而不是使用 Spring 框架提供的特定于 Spring 的机制。
从 Spring Framework 5.0 开始,Spring 至少需要 Java EE 7 级别(例如 Servlet 3.1+,JPA 2.1+)作为最低要求,同时在运行时提供与 Java EE 8 级别(例如 Servlet 4.0,JSON Binding API)中较新 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.io/projects 查看完整的 Spring 项目列表。
3. 设计哲学
当你学习一个框架时,了解它的功能和遵循的原则同样重要。以下是 Spring 框架的指导原则:
-
在每个层级提供选择。Spring 允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久化提供者,而无需更改代码。许多其他基础设施问题和与第三方 API 的集成也是如此。 -
容纳多样化的观点。Spring 拥抱灵活性,并不对事情的处理方式持有偏见。它支持各种应用需求,具有不同的视角。 -
保持强大的向后兼容性。Spring 的演变经过精心管理,以尽量减少版本之间的重大变更。Spring 支持精心选择的一系列 JDK 版本和第三方库,以便于维护依赖于 Spring 的应用程序和库。 -
关注 API 设计。Spring 团队在创建直观且能够在多个版本和多年中保持一致的 API 上投入了大量的思考和时间。 -
设定高标准的代码质量。Spring 框架非常重视有意义、当前和准确的 javadoc。它是为数不多的几个可以声称代码结构清晰且包之间没有循环依赖的项目之一。
4. 反馈与贡献
对于如何提问或诊断、调试问题,我们建议使用 Stack Overflow。点击这里查看建议在 Stack Overflow 上使用的标签列表。如果您相当确定 Spring Framework 中存在问题或想要建议一个功能,请使用 GitHub Issues。
如果您有解决方案或建议的修复,可以在 GitHub 上提交拉取请求。然而,请记住,对于除最简单的问题之外,我们希望在问题跟踪器中提交工单,在那里进行讨论并留下未来参考的记录。
有关更多详细信息,请参阅 CONTRIBUTING 中的指南,项目顶层页面。
5. 入门指南
如果您刚刚开始使用 Spring,您可能想通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring 框架。Spring Boot 提供了一种快速(且有指导性的)方式来创建一个生产就绪的基于 Spring 的应用程序。它基于 Spring 框架,偏向于约定优于配置,并旨在让您尽快启动和运行。
您可以使用 start.spring.io 生成一个基本项目,或遵循其中一个“入门”指南,例如《入门构建 RESTful Web 服务》。这些指南不仅更易于理解,而且非常专注于任务,并且大多数基于 Spring Boot。它们还涵盖了 Spring 组合中的其他项目,您在解决特定问题时可能会考虑这些项目。