本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

Spring使创建Java企业应用程序变得容易。它提供了你在企业环境中拥抱Java语言所需的一切,支持Groovy和Kotlin作为JVM上的替代语言,并根据应用的需要灵活地创建多种架构。从Spring Framework 6.0开始,Spring需要Java 17+。

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

Spring是开源的。它有一个庞大而活跃的社区,根据不同的现实世界的使用案例提供持续的反馈。这有助于Spring在很长一段时间内成功发展。

1. 我们对"Spring"的理解

术语 "Spring" 在不同的语境中意味着不同的东西。它可以用来指代Spring框架项目本身,它是一切的开始。随着时间的推移,其他Spring项目也被建立在Spring框架之上。大多数时候,当人们说 "Spring" 时,他们指的是整个项目家族(全家桶)。这个参考文档的重点是基础:Spring框架本身。

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

关于模块的说明。Spring框架的jar允许部署到JDK 9的模块路径("Jigsaw")。为了在支持Jigsaw的应用程序中使用,Spring Framework 5的jar带有 "Automatic-Module-Name" 清单项,它定义了独立于jar artifact 名称的稳定的语言级模块名称("spring.core"、"spring.context" 等)(jar遵循相同的命名模式,以"-"代替".",例如 "spring-core" 和 "spring-context")。当然,Spring框架的jar在JDK 8和9+的classpath上都保持正常工作。

2. Spring和Spring框架的历史

作为对早期 J2EE 规范的复杂性的回应,Spring于2003年诞生了。虽然有些人认为Java EE及其现代的继任者Jakarta EE与Spring有竞争关系,但事实上它们是互补的。Spring编程模型并不拥抱Jakarta EE平台规范;相反,它与从传统的EE伞中精心挑选的个别规范进行整合。

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

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

随着时间的推移,Java/Jakarta EE在应用程序开发中的作用已经发生了变化。在J2EE和Spring的早期,应用程序是为了部署到应用服务器上而创建的。今天,在Spring Boot的帮助下,应用程序是以一种对开发者和云计算友好的方式创建的,Servlet容器是嵌入式的,并且易于改变。从Spring框架5开始,WebFlux应用程序甚至不直接使用Servlet API,可以在非Servlet容器的服务器(如Netty)上运行。

Spring不断创新,不断发展。除了Spring框架,还有其他项目,如Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch等。重要的是要记住,每个项目都有自己的源代码库、issue tracker 和发布节奏。参见 spring.io/projects,了解Spring项目的完整列表。

3. 设计理念

当你了解一个框架时,重要的是不仅要知道它做什么,还要知道它遵循什么原则。下面是Spring框架的指导原则。

  • 在每个层面上提供选择。Spring让你尽可能晚地推迟设计决策。例如,你可以通过配置来切换持久化供应商,而不需要改变你的代码。对于许多其他基础设施问题和与第三方API的集成也是如此。

  • 适应不同的观点。Spring拥抱灵活性,对事情应该如何做不持意见。它支持具有不同视角的广泛的应用需求。

  • 保持强大的后向兼容性。Spring的演进是经过精心管理的,在不同的版本之间几乎不存在破坏性的变化。Spring支持一系列精心选择的JDK版本和第三方库,以方便维护依赖Spring的应用程序和库。

  • 关心API的设计。Spring团队花了很多心思和时间来制作直观的API,并且在很多版本和很多年中都能保持良好的效果。

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

4. 反馈和贡献

对于如何处理问题或诊断或调试问题,我们建议使用Stack Overflow。点击 这里 查看Stack Overflow上建议使用的标签列表。如果你相当确定Spring框架中存在问题,或者想建议一个功能,请使用 GitHub Issues

如果你有一个解决方案或建议的修复,你可以在 Github 上提交一个 pull request。然而,请记住,除了最微不足道的问题,我们希望在 issue tracker 中提交一个 ticket,在那里进行讨论并留下记录供将来参考。

更多的细节,请参见 CONTRIBUTING,顶层项目页面上的指南。

5. 入门

如果你刚刚开始使用Spring,你可能想通过创建一个基于 Spring Boot 的应用程序开始使用Spring框架。Spring Boot提供了一种快速(和有主见)的方式来创建一个生产就绪的基于Spring的应用程序。它以Spring框架为基础,更倾向于约定俗成的配置,旨在让你尽快启动和运行。

你可以使用 start.spring.io 来生成一个基本项目,或者按照 "入门"指南 来做,比如 《开始构建RESTful Web服务》。这些指南除了更容易消化之外,还非常注重任务,而且大部分都是基于Spring Boot的。它们也涵盖了Spring组合中的其他项目,在解决特定问题时,你可能要考虑这些项目。

官方的 start.spring.io 服务在国外,在国内经常不能访问。推荐使用 SpringBoot中文社区 提供的 https://start.springboot.io 镜像服务。