20220507 Overview
前言
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 框架被划分为多个模块。应用程序可以选择他们需要的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring Framework 还为不同的应用程序架构提供基本支持,包括消息传递、事务数据和持久化以及 web 。它还包括基于 Servlet 的 Spring MVC web 框架,同时还包括 Spring WebFlux 反应式 web 框架。
关于模块的说明: 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 和 9+ 上的类路径上仍然可以正常工作。
Spring 的历史和 Spring Framework
Spring 出现于 2003 年,是对早期 J2EE 规范的复杂性的响应。虽然有些人认为 Java EE 和 Spring 是竞争对手,但实际上 Spring 是 Java EE 的补充。Spring 编程模型并不包含 Java EE 平台规范;相反,它集成了来自 Java 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 级别 (例如 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 框架之外,还有其他项目,如 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 。它是少数几个可以声称代码结构清晰、包之间没有循环依赖关系的项目之一
反馈和贡献
对于 how-to 问题或诊断或调试问题,我们建议使用 Stack Overflow。获取 Stack Overflow 上建议使用的 标记列表 。如果你确定 Spring 框架有问题,或者想要推荐一个特性,请使用 GitHub Issues
如果您心中有一个解决方案或建议的修复方案,您可以在 Github 上提交一个 pull request 。然而,请记住,除了最微不足道的问题,我们希望在问题跟踪器中归档一份文档,在那里进行讨论,并留下一个记录以备将来参考。
有关详细信息,请参阅 贡献 顶级项目页面的指南。
开始
如果您刚刚开始使用 Spring,您可能希望通过创建一个基于 Spring Boot 的应用程序来开始使用 Spring Framework 。Spring Boot 提供了一种快速方法来创建可用于生产环境的 Spring 应用程序。它以 Spring 框架为基础,支持约定优于配置,目的是让你尽可能快地启动和运行。
您可以使用 start.spring.io 生成一个基本项目,或者遵循 入门指南 中的某一个,例如 开始构建 RESTful Web Service 。这些指南不仅容易理解,而且非常专注于任务,大多数都是基于 Spring Boot 的。它们还涵盖了 Spring portfolio 中的其他项目,在解决特定问题时,您可能需要考虑这些项目。