概述
Spring 使创建 Java 企业应用程序变得很容易,它提供了在企业环境中使用 Java 语言所需要的一切,支持 Groovy 和 Kotlin 作为 JVM 上的替代语言,并根据应用程序的需求灵活地创建多种体系结构,从 Spring Framework 5.1 开始,Spring 需要 JDK 8+(Java SE 8+),并为 JDK 11 LTS 提供开箱即用的支持。
Spring 支持广泛的应用程序场景,在大型企业中,应用程序通常存在很长时间,并且必须运行在 JDK 和应用服务器上,升级周期超出了开发人员的控制。其他的可以作为一个单独的 jar 运行,并嵌入服务器,可能是在云环境中,还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring 是开源的,它拥有一个大型且活跃的社区,该社区基于各种实际用例提供持续的反馈,这帮助 Spring 在很长一段时间内成功地发展。
我们所说的“Spring”是什么意思
“Spring”一词在不同的上下文中有不同的含义,它可以用来引用 Spring Framework 项目本身,这是它开始的地方,随着时间的推移,其他 Spring 项目已经构建在 Spring Framework 之上,大多数情况下,当人们说“Spring”,他们指的是整个家庭的项目,这个参考文档主要关注基础:Spring Framework本身。
Spring Framework被划分为多个模块,应用程序可以选择它们需要哪些模块,核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,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 平台规范,相反,它集成了从 EE 保护伞中精心选择的各个规范:
- Servlet API(JSR 340)
- WebSocket API(JSR 356)
- 并发实用程序(JSR 236)
- JSON 绑定 API(JSR 367)
- Bean 验证(JSR 303)
- JPA(JSR 338)
- JMS(JSR 914)
- 以及 JTA/JCA 设置,以便在必要时进行事务协调。
Spring Framework还支持依赖项注入(JSR 330)和公共注解(JSR 250)规范,应用程序开发人员可以选择使用这些规范,而不是 Spring Framework 提供的特定于 Spring 的机制。
从Spring Framework 5.0 开始,Spring 最小需要 Java EE 7 级别(例如 Servlet 3.1 +、JPA 2.1 +),同时提供开箱即用的集成与更新的 API 在 Java EE 8 级别(例如 Servlet 4.0、JSON 绑定 API)在运行时遇到,这使得 Spring 与 Tomcat 8 和 Tomcat 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 Framework 的指导原则:
- 在每个层次上提供选择,Spring 允许你尽可能推迟设计决策,例如,你可以通过配置切换持久性提供者,而无需更改代码,对于许多其他基础设施问题以及与第三方 API 的集成也是如此。
- 适应不同的视角,Spring 支持灵活性,并且不对应该如何做事情发表意见,它支持具有不同视角的广泛应用程序需求。
- 保持强大的向后兼容性,Spring 的发展已经被小心地管理,以在版本之间强制进行很少的破坏性更改,Spring 支持精心选择的 JDK 版本和第三方库,以方便维护依赖于 Spring 的应用程序和库。
- 关注 API 设计,Spring 团队投入了大量的思想和时间来开发直观的 API,并支持多个版本和许多年。
- 为代码质量设定高标准,Spring Framework非常强调有意义的、当前的和准确的 javadoc,它是极少数可以声明干净代码结构且包之间没有循环依赖关系的项目之一。
入门
如果你刚刚开始使用 Spring,你可能希望通过创建一个基于 Spring boot 的应用程序来开始使用Spring Framework,Spring Boot 提供了一种快速(且固定)的方法来创建基于 Spring 的可生产应用程序,它基于Spring Framework,支持约定而不是配置,旨在让你尽可能快地启动和运行。
你可以使用 start.spring.io 生成一个基本项目或遵循“入门”指南之一,例如开始构建 RESTful Web 服务。这些指南不仅更容易理解,而且非常专注于任务,其中大多数都是基于 Spring Boot 的,它们还涵盖了 Spring portfolio 中的其他项目,你在解决特定问题时可能需要考虑这些项目。