Spring使创建Java企业应用程序变得很容易。它提供了在企业环境中使用Java语言所需的一切,支持将Groovy和Kotlin作为JVM上的替代语言,并且可以根据应用程序的需要灵活地创建多种体系结构。从Spring Framework5.1开始,Spring需要JDK 8+(Java SE 8+),并为JDK 11 LTS提供开箱即用的支持。建议将Java SE 8更新60作为Java 8的最低修补程序版本,但通常建议使用最新的修补程序版本。

Spring支持广泛的应用场景。在大型企业中,应用程序通常存在很长时间,并且必须在JDK和应用服务器上运行,而这些服务器的升级周期超出了开发人员的控制。其他的可能作为嵌入服务器的单个JAR运行,可能是在云环境中。还有一些可能是不需要服务器的独立应用程序(如批处理或集成工作负载)。

Spring是开源的。它有一个庞大而活跃的社区,根据各种现实世界的用例提供持续的反馈。这帮助了Spring在很长一段时间内成功地进化。

1. What We Mean by "Spring"

“春天”这个词在不同的语境中有不同的含义。它可以用来引用Spring框架项目本身,它就是一切开始的地方。随着时间的推移,其他的Spring项目已经构建在了Spring框架之上。大多数情况下,当人们说“春天”时,他们指的是整个项目家族。本参考文档关注的是基础:Spring框架本身。

Spring框架分为多个模块。应用程序可以选择它们需要的模块。核心是核心容器的模块,包括配置模型和依赖注入机制。除此之外,Spring框架还为不同的应用程序架构提供了基础支持,包括消息传递、事务数据和持久化以及Web。它还包括基于Servlet的Spring MVC Web框架以及并行的Spring WebFlux反应性Web框架。

关于模块的注意事项:Spring的框架JAR允许部署到JDK 9的模块路径(“Jigsaw”)。为了在支持Jigsaw的应用程序中使用,Spring Framework5JAR附带了“Automatic-Module-name”清单条目,这些条目定义了稳定的语言级模块名称(“spring.core”、“spring.context”等)。独立于JAR构件名称(JAR遵循相同的命名模式,使用“-”而不是“.”,例如“Spring-core”和“SpringContext”)。当然,Spring的框架JAR在JDK 8和9+上的类路径上都工作得很好。

2. History of Spring and the Spring Framework

Spring诞生于2003年,是对早期j2ee规范复杂性的响应。虽然有些人认为Java EE及其现代继任者Jakarta EE是与Spring竞争的,但实际上它们是互补的。Spring编程模型不包含Jakarta EE平台规范;相反,它集成了从传统EE保护伞中精心选择的各个规范:

Spring框架还支持依赖注入(JSR 330)和公共注释(JSR 250)规范,应用程序开发人员可以选择使用它们来代替Spring框架提供的特定于Spring的机制。最初,这些是基于常见的javax包。

从Spring Framework6.0开始,Spring已经升级到Jakarta EE 9级别(例如Servlet 5.0+、JPA 3.0+),基于Jakarta命名空间,而不是传统的javax包。由于EE9是最低版本,并且已经支持EE10,Spring准备为Jakarta EEAPI的进一步发展提供开箱即用的支持。Spring Framework6.0与Tomcat 10.1、Jetty 11和Undertow 2.3作为Web服务器完全兼容,也与Hibernate ORM 6.1完全兼容。

随着时间的推移,Java/Jakarta EE在应用程序开发中的角色发生了变化。在J2EE和Spring的早期,创建应用程序是为了将其部署到应用程序服务器。现在,在Spring Boot的帮助下,应用程序是以一种对devop和云友好的方式创建的,其中嵌入了Servlet容器,更改起来很简单。从Spring Framework5开始,WebFlux应用程序甚至不直接使用Servlet API,可以在非Servlet容器的服务器(如Netty)上运行。

春天在继续创新和进化。除了Spring框架,还有其他项目,如Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch等等。重要的是要记住,每个项目都有自己的源代码存储库、问题跟踪器和发布节奏。有关Spring项目的完整列表,请参阅spring.io/project

3. Design Philosophy

当您学习框架时,不仅要知道它做什么,还要知道它遵循什么原则,这一点很重要。以下是Spring框架的指导原则:

  • 在每个层面上提供选择。Spring可以让您尽可能地推迟设计决策。例如,您可以通过配置切换持久性提供程序,而无需更改代码。许多其他基础设施问题和与第三方API的集成也是如此。

  • 容纳不同的视角。Spring拥护灵活性,对如何做事情并不固执己见。它以不同的视角支持广泛的应用需求。

  • 保持强大的向后兼容性。Spring的发展经过精心管理,几乎没有在版本之间强制进行突破性的更改。Spring支持一系列精心选择的JDK版本和第三方库,以方便依赖于Spring的应用程序和库的维护。

  • 关心API设计。Spring团队投入了大量的精力和时间来开发直观的、跨多个版本和多年的API。

  • 为代码质量设定高标准。Spring框架非常强调有意义的、最新的和准确的javadoc。它是为数不多的声称代码结构清晰、包之间没有循环依赖的项目之一。

4. Feedback and Contributions

对于How-to问题或诊断或调试问题,我们建议使用Stack Overflow。单击此处查看建议用于堆栈溢出的标记列表。如果您相当确定在Spring框架中存在问题或者想要建议一个特性,请使用GitHub问题

如果您有解决方案或建议的解决方案,您可以在Github上提交拉取请求。然而,请记住,除了最微不足道的问题外,我们希望在问题追踪器上提交一张罚单,在那里进行讨论并留下记录,以备将来参考。

有关更多详细信息,请参阅贡献顶级项目页面上的指导方针。

5. Getting Started

如果您刚刚开始使用Spring,您可能希望通过创建一个基于Spring Boot的应用程序来开始使用Spring框架。Spring Boot提供了一种快速(且固执己见的)方法来创建可用于生产的基于Spring的应用程序。它基于Spring框架,偏爱约定而不是配置,旨在让您尽可能快地上手和运行。

您可以使用start.spring.io生成一个基本项目,或者按照“入门”指南之一进行操作,例如开始构建REST风格的Web服务。这些指南不仅易于理解,而且非常注重任务,而且大多数指南都是基于Spring Boot的。它们还涵盖了您在解决特定问题时可能需要考虑的Spring项目组合中的其他项目。