Spring框架概述
最近发现了一个Spring的中文网,文档翻译的很全,故后续不再继续翻译文档。
文章列表
版本 5.3.27
Spring让创建Java企业级应用变得简单。在企业级应用环境下,Spring提供了拥抱Java语言所需的一切,并支持Groovy和Kotlin作为JVM上的备选语言,并且可以根据应用的需要,提供创建多种架构的灵活性。从Spring框架5.1开始,Spring要求JDK 8+(Java SE 8+)并且提供对于JDK 11 LTS提供开箱即用的支持。Java SE 8 update 60建议作为Java 8的最小补丁版本,但通常建议使用最新的补丁版本。
Spring支持广泛的应用场景。在大型企业中,应用程序通常存在很长时间,并且必须在JDK和应用程序服务器上运行,其升级周期超出开发人员的控制范围。其他可能作为嵌入服务器的单个jar运行,可能在云环境中。还有一些可能是不需要服务器的独立应用程序(如批处理或集成工作负载)。
Spring是开源的。它有一个庞大而活跃的社区,提供基于各种实际用例的持续反馈。这帮助Spring在很长一段时间内成功地发展。
1. “Spring”意味着什么?
术语“Spring”在不同的上下文中有不同的含义。它可以用来引用Spring框架项目本身,这是它开始的地方。随着时间的推移,其他Spring项目已经构建在Spring框架之上。大多数情况下,当人们说“Spring”时,他们指的是整个项目家族。本参考文档主要关注其基础:Spring框架本身。
Spring框架分为几个模块。应用程序可以选择它们需要的模块。核心容器的模块处于核心位置,包括配置模型和依赖项注入机制。除此之外,Spring框架还为不同的应用程序体系结构提供了基础支持,包括消息传递、事务性数据和持久性以及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”)。当然,在JDK 8和JDK 9+的类路径下,Spring的框架jar都能很好地工作。
2. Spring的历史和Spring框架
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级别的新API(例如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项目的完整列表
3. 设计哲学(Design Philosophy)
当您学习一个框架时,重要的是不仅要知道它做什么,还要知道它遵循什么原则。以下是Spring框架的指导原则:
- 在每个层面提供选择。Spring允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久层,而无需更改代码。对于许多其他基础设施问题和与第三方api的集成也是如此。
- 包容不同的场景(Accommodate diverse perspectives)。Spring拥抱灵活性,并且不固执于应该如何做事情。它支持具有不同场景的广泛应用程序需求。
- 保持强大的向后兼容性(backward compatibility)。Spring的演变得到了精心的管理,在版本之间很少强制进行突破性的更改。Spring支持一系列精心挑选的JDK版本和第三方库,以方便对依赖Spring的应用程序和库的维护。
- 关注API设计。Spring团队投入了大量的精力和时间来制作易懂的(intuitive)API,这些api可以跨越许多版本和许多年。
- 为代码质量设定高标准。Spring框架非常强调有意义的、最新的和准确的javadoc。它是少数几个可以宣称代码结构干净且包之间没有循环依赖的项目之一。
4. 反馈和贡献( Feedback and Contributions)
对于如何提问或诊断或调试问题,我们建议使用Stack Overflow。点击这里查看在Stack Overflow上使用的建议标签列表。如果你非常确定Spring框架中有问题,或者想建议一个功能,请使用 GitHub Issues。
如果你有一个解决方案或建议修复,你可以在Github上提交pull request。但是,请记住,除了最琐碎的问题之外,我们希望在问题跟踪器(issue tracker)中提交一个票据(ticket),在那里进行讨论并留下记录以供将来参考。
有关更多详细信息,请参阅 CONTRIBUTING顶级项目页面上的指导方针
5. 快速开始
如果您刚刚开始使用Spring,您可能希望通过创建一个基于 Spring Boot的应用程序来开始使用Spring框架。Spring Boot提供了一种快速且固定不变的(opinionated)的方法来创建生产就绪的基于Spring的应用程序。它基于Spring框架,支持约定大于配置(convention over configuration),旨在让您尽可能快地启动和运行。
你可以通过start.spring.io产生一个基础项目,或跟随一个"快速开始" 指南,如开始构建一个RESTful Web服务。这些指南不仅易于理解,而且非常注重任务,其中大多数都基于Spring Boot。它们还涵盖了在解决特定问题时可能需要考虑的Spring组合中的其他项目。