包含:历史、设计理念、反馈、入门。
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.core
、spring.context
等)(jars 遵循相同的命名模式,以 -
代替 .
,例如 spring-core
和 spring-context
)。当然,Spring 的框架 jars 在 JDK 8 和 9+ 的 classpath 上都保持正常工作。
Spring 和 Spring 框架的历史
作为对早期 J2EE 规范的复杂性的回应,Spring 于 2003 年诞生了。虽然有些人认为 Java EE 和 Spring 是竞争关系,但事实上,Spring 是对Java EE 的补充。Spring 编程模型并不拥抱 Java EE 平台规范;相反,它与 EE 伞中精心挑选的个别规范相整合:
- Servlet API (JSR 340)
- WebSocket API (JSR 356)
- Concurrency Utilities (JSR 236) :并发工具类
- JSON Binding 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 级别的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 组合中的其他项目,在解决特定问题时,你可能要考虑这些项目。