Spring 可以轻松创建 Java 企业级应用程序。它提供了在企业级应用中使用 Java 语言所需的一切,包括使用 Groovy 和 Kotlin 作为 JVM 上的替代语言,并可根据应用程序的需要灵活地创建多种体系结构。从 Spring Framework 5.0 开始,Spring 需要 JDK 8+(Java SE 8+),并且已经为 JDK 11 提供了开箱即用的支持。
Spring 支持的应用场景非常广泛。在大型企业环境中,应用程序通常会运行很长时间,并且需要在官方不再支持的老版本 JDK 和应用程序服务器上运行。也可能作为单个 jar 包运行在嵌入型服务器中,也有可能在云环境中运行,还有一些可能是不需要服务器的独立应用程序(例如批处理或集成工作负载)。
Spring 是开源的。它拥有一个庞大而活跃的社区,社区会根据各种各样的实际使用情况提供持续的反馈,这有助于 Spring 在很长一段时间内的良好发展。
1. "Spring"是什么?
“Spring”在不同的语境下意味着不同的东西。它可以用来代指 Spring Framework 本身,这是 Spring 家族的基础。随着时间的推移,其他 Spring 项目已经构建在 Spring Framework 之上。大多数情况下,当人们说“Spring”时,他们指的是整个项目家族。本参考文档侧重于基础:Spring Framework 本身。
Spring 框架分为几个模块。应用程序可以选择所需的模块。最核心的是包括配置模型和依赖注入机制的核心容器模块。除此之外,Spring Framework 还为不同的应用程序体系结构提供了基础支持,包括消息机制,数据的事务和持久化以及 Web。它还包括基于 Servlet 的 Spring MVC Web 框架,以及响应式 Web 框架 Spring WebFlux。
关于模块的说明:Spring 的框架 jar 包允许部署到 JDK 9 的模块路径中(“Jigsaw”)。为了在支持 Jigsaw 的应用程序中使用,Spring Framework 5 的 jar 包带有“Automatic-Module-Name”条目清单,它们定义了独立于 jar 包的固定语言级模块名称,例如“spring.core”,“spring.context”等。(jar 包使用相同的命名模式,使用“-”代替“.”,例如“spring-core”和“spring-context”)。当然,Spring 框架 jar 包在 JDK 8 和 9 上都能正常工作。
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)
- 并发实用程序 (JSR 236)
- JSON 绑定 API (JSR 367)
- Bean验证 (JSR 303)
- JPA (JSR 338)
- JMS (JSR 914)
- 必要时用于事务协调的 JTA/JCA 设置
Spring Framework 还支持依赖注入(JSR330)和公共注解(JSR 250)规范,应用程序开发人员可以选择使用这些规范,而不是 Spring Framework 提供的 Spring 特有的机制。
从 Spring Framework 5.0 开始,Spring 至少需要 Java EE 7,例如 Servlet 3.1 + 和 JPA 2.1+,同时也为 Java EE 8 运行时提供了开箱即用的新 API 集成,例如 Servlet 4.0 和 JSON 绑定 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 Framework 之外,还有其他项目,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。重要的是,要记住每个项目都有自己的源代码存储库、问题跟踪器和发布节奏。有关 Spring 项目的完整列表,请参见 spring.io/projects。
3.设计理念
当你了解框架时,重要的是不仅要知道它的作用,还要了解它遵循的原则。以下是 Spring Framework 的指导原则:
- 提供各个层面的选择。Spring 允许您尽可能晚地推迟设计决策。例如,您可以通过配置切换持久性提供程序,而无需更改代码。许多其他基础架构和第三方 API 的集成也是如此。
- 适应不同的观点。Spring 拥抱灵活性,也不会顽固的认为事情该如何做。它以不同的视角支持广泛的应用需求。
- 保持强大的向后兼容性。Spring 的演变经过精心设计,在版本之间会进行一些重大改变。Spring 支持精心挑选的一系列 JDK 版本和第三方库,以便于依赖 Spring 的应用程序和库进行维护。
- 重视 API 设计。Spring 团队花了很多心思和时间来制作直观的 API,这些 API 在很多版本和多年中都有用。
- 为代码质量设定高标准。Spring Framework 非常强调有意义、最新和准确的 javadoc。它是极少数可以声称代码整洁且包之间没有循环依赖的项目之一。
4.反馈和贡献
对于如何提问、诊断或调试问题,我们建议使用 StackOverflow,我们有一个问题页面列出了建议使用的标签。如果您非常确定 Spring Framework 中存在问题或想要在功能上给出建议,请使用JIRA问题跟踪器。
如果您有解决思路或建议的修复方法,您可以在 Github 上提交拉取请求 。但是请记住,除了很小的问题以外,我们希望你在问题跟踪器中提交一条记录,在那里进行讨论并留下记录以供将来参考。
更多详细信息,请参阅项目根目录中“贡献”页面上的指南。
5.入门
如果你刚刚开始使用 Spring,你可能希望通过创建基于 Spring Boot 的应用程序来开始使用 Spring Framework 。Spring Boot 提供了一种快速且固定的方式来创建一个可用于生产环境的基于 Spring 的应用程序。它基于 Spring Framework,倾向于约定优于配置,旨在帮助您尽快启动和运行。
您可以使用 start.spring.io 生成基本项目,也可以按照入门指南进行操作,例如构建 RESTful Web 服务入门。这些指南非常容易理解且目标明确,大多数都基于 Spring Boot。它们还涵盖了 Spring 家族中在解决特定问题时可能需要考虑的其他项目。