Spring 框架概览
Version 5.3.22
历史
Spring 框架分为几个模块。应用程序可以选择它们需要的模块。最核心的是包括配置模型(configuration model)和依赖注入(dependency injection)机制的核心容器(core container)模块。除此之外,Spring 框架还为不同的应用程序架构提供了基础支持,包括消息传递、事务数据和持久性以及 web。它还包括基于 servlet 的 Spring MVC web 框架,以及对应的 Spring WebFlux 响应式 web 框架。
Spring 出现于2003年,作为对早期 J2EE 规范复杂性的响应。虽然有些人认为 Java EE 和 Spring 是竞争关系,但事实上,Spring 是 Java EE 的补充。Spring 编程模型没有包含所有 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 绑定 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 允许尽可能延迟设计决策。例如,可以通过配置切换持久化提供程序,而无需更改代码。对于许多其他基础设施以及与第三方 API 的集成也是如此。
-
容纳不同的观点。Spring 崇尚灵活性,不会固执地认为事情应该如何做。它以不同的观点支持广泛的应用需求。
-
保持强大的向后兼容性。Spring 的发展经过了精心的管理,使得版本之间很少有破坏性的更改。Spring 支持精心选择的 JDK 版本和第三方库,以促进依赖 Spring 的应用程序和库的维护。
-
关心 API 设计。Spring 团队花了大量的时间和精力来制作直观的 API,并支持多个版本和多年的 API。
-
为代码质量设定高标准。Spring 框架非常强调有意义的、最新的和准确的 javadoc。它是少数几个可以声称代码结构干净、包之间没有循环依赖关系的项目之一。