Spring框架概述

Spring使得创建Java企业应用变得简单。它提供了一切您需要的东西,以便在企业环境中采用Java语言,支持Groovy和Kotlin作为JVM上的替代语言,并具有根据应用程序需求创建多种架构的灵活性。从Spring Framework 6.0开始,Spring需要Java 17+。

Spring支持各种应用场景。在大型企业中,应用程序通常存在很长时间,并且必须在开发人员无法控制的JDK和应用服务器上运行。其他可能作为单个jar文件与服务器嵌入式运行,可能在云环境中。还有一些可能是独立的应用程序(例如批处理或集成工作负载),不需要服务器。

Spring是开源的。它拥有一个庞大而活跃的社区,根据各种真实用例提供持续反馈。这有助于Spring在很长时间内成功发展。

"Spring"的含义

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及其现代继承者Jakarta EE与Spring竞争,但它们实际上是互补的。Spring编程模型不包含Jakarta EE平台规范;相反,它与传统EE伞下的精心选择的个别规范集成:

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

截至Spring Framework 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的帮助,应用程序以devops友好和云友好的方式创建,Servlet容器被嵌入其中并且易于更改。从Spring Framework 5开始,WebFlux应用程序甚至不直接使用Servlet API,可以在不是Servlet容器的服务器上运行(例如Netty)。

Spring继续创新和发展。除了Spring Framework之外,还有其他项目,如Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch等。重要的是要记住,每个项目都有自己的源代码存储库、问题跟踪器和发布节奏。请查看spring.io/projects获取完整的Spring项目列表。

设计哲学

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

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

  • 包容多元视角。Spring支持灵活性,不对应该如何完成事情持有固定看法。它支持各种应用需求,具有不同的视角。

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

  • 关注API设计。Spring团队花费大量时间和精力制定直观且经得起多个版本和多年考验的API。

  • 设定高标准的代码质量。Spring Framework非常重视有意义、当前和准确的javadoc。它是极少数可以声称代码结构清晰、包之间没有循环依赖的项目之一。

反馈和贡献

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

如果您有解决方案或建议的修复方法,可以在Github上提交拉取请求。但是,请记住,除了最琐碎的问题外,我们希望在问题跟踪器中提交一个工单,讨论在那里进行,并留下记录以供将来参考。

有关详细信息,请参阅CONTRIBUTING,顶级项目页面的指南。

入门指南

如果您刚开始使用Spring,您可能希望通过创建基于Spring Boot的应用程序来开始使用Spring Framework。Spring Boot提供了一种快速(且具有偏见性)的方式来创建一个可投入生产的基于Spring的应用程序。它基于Spring Framework,偏向于约定优于配置,并旨在让您尽快启动和运行。

您可以使用start.spring.io生成一个基本项目,或者遵循其中一个"入门指南",例如入门构建RESTful Web服务。除了更易于理解外,这些指南非常注重任务,大多数基于Spring Boot。它们还涵盖了Spring组合中的其他项目,您在解决特定问题时可能需要考虑这些项目。