俯瞰Spring风景线

要想了解 Spring 的整体状况,只需查看完整版本的 Spring Initializr Web 表单上的那些复选框列表。它列出了 100 多个可选的依赖项,所以我不会在这里列出所有选项,也不会提供截图,但我鼓励你去看一看。同时,在这里我会简单介绍一些重点的项目。

Spring核心框架

如你所料,Spring 核心框架是 Spring 领域中一切的基础,提供了核心容器和依赖注入框架。另外,它还提供了一些其他重要的特性。

其中有一项就是 Spring MVC,也就是 Spring 的 Web 框架。你已经看到了如何使用 Spring MVC 来编写控制器类以处理 Web 请求。但是,你还没看到的是,Spring MVC 还能用来创建 REST API,以生成非 HTML 的输出。在第 2 章,我会更深入地介绍 Spring MVC。在第 7 章,我们会重新学习如何使用 Spring MVC 来创建 REST API。

Spring 核心框架还提供了一些对数据持久化的基础支持,尤其是基于模板的 JDBC 支持。在第 3 章,我们会看到如何使用 JdbcTemplate。

Spring 还添加了对反应式(reactive)风格编程的支持,其中包括名为 Spring WebFlux 的新反应式 Web 框架,这个框架大量借鉴了 Spring MVC。在第 3 部分中,我们会学习 Spring 反应式编程模型,并在第 12 章专门学习 Spring WebFlux。

Spring Boot

我们已经看到了 Spring Boot 的很多优势,包括 starter 依赖和自动配置。在本书中,我们会尽可能多地使用 Spring Boot,并避免任何形式的显式配置,除非显式配置是绝对必要的。除了 starter 依赖和自动配置,Spring Boot 还提供了大量其他有用的特性:

  • Actuator 能够洞察应用运行时的内部工作状况,包括指标、线程 dump信息、应用的健康状况以及应用程序可用的环境属性;

  • 灵活的环境属性规范;

  • 在核心框架的测试辅助功能之上,提供了对测试的额外支持。

除此之外,Spring Boot 还提供了一个基于 Groovy 脚本的编程模型,称为 Spring Boot CLI。使用 Spring Boot CLI,我可以将整个应用程序编写为 Groovy 脚本的集合,并通过命令行运行它们。我不会花太多时间介绍 Spring Boot CLI,但是当它匹配我们的需求时,会偶尔提及它。

Spring Boot 已经成为 Spring 开发中不可或缺的一部分,很难想象如果没有它该如何开发 Spring 应用程序。因此,本书采用了以 Spring Boot 为核心的视角。当我介绍 Spring Boot 所做的事情的时候,你可能会发现我使用了 Spring 这个表述。

Spring Data

尽管 Spring 核心框架提供了基本的数据持久化支持,但 Spring Data 提供了非常令人惊叹的功能:将应用程序的数据存储库(repository)定义为简单的 Java 接口,在定义存储和检索数据的方法时使用一种特定的命名约定即可。

此外,Spring Data 能够处理多种不同类型的数据库,包括关系型数据库(通过 JDBC 或 JPA 实现)、文档数据库(Mongo)、图数据库(Neo4j)等。在第 3 章,我们会使用 Spring Data 为 Taco Cloud 应用程序创建存储库。

Spring Security

应用程序的安全性一直是重要的话题,而且正在变得越来越重要。幸运的是,Spring有一个健壮的安全框架,名为 Spring Security。

Spring Security 解决了应用程序通用的安全性需求,包括身份验证、授权和 API安全性。Spring Security 的范围太大,在本书中无法得到充分的介绍,但是我们会在第 5 章和第 12 章中讨论一些最常见的使用场景。

Spring Integration和Spring Batch

一定程度上,大多数应用程序都需要与其他应用甚至本应用中的其他组件集成。在这方面,有一些应用程序集成的模式来解决这些需求。Spring Integration 和 Spring Batch 为基于 Spring 的应用程序提供了这些模式的实现。

Spring Integration 解决了实时集成问题,在实时集成中,数据在可用时马上就会得到处理。相反,Spring Batch 解决的则是批处理集成的问题,在此过程中,数据可以收集一段时间,直到某个触发器(可能是一个时间触发器)发出信号表明是时候处理批量数据了,才会得到处理。我们会在第 10 章中研究 Spring Integration。

Spring Cloud

应用程序开发领域正在进入新的时代,我们不再将应用程序作为一个部署单元的单体应用来开发,而是使用由微服务组成的多个独立部署单元来组合形成应用程序。

微服务是一个热门话题,解决了开发期和运行期的一些实际问题。然而,在这样做的过程中,它也面临着自己所带来的挑战。这些挑战将由 Spring Cloud 直面解决,Spring Cloud 是使用 Spring 开发云原生应用程序的一组项目。

Spring Cloud 覆盖了很多领域,这本书不可能面面俱到。关于对 Spring Cloud的完整介绍,我推荐阅读 Thomas Vitale 的 Cloud Native Spring in Action(Manning,2020年)。

Spring Native

Spring 一个相对较新的进展是 Spring Native 项目。这个实验性的项目能够使用 GraalVM 原生镜像编译器将 Spring Boot 项目编译成原生可执行的文件,从而使镜像的启动速度显著加快,并且占用更小的空间。

关于 Spring Native 的更多信息,参见 GitHub 网站的 spring-projects-experimental/spring- native 代码库。

小结

  • Spring 旨在简化开发人员所面临的挑战,比如创建 Web 应用程序、处理数据库、保护应用程序,以及实现微服务。

  • Spring Boot 构建在 Spring 之上,通过简化依赖管理、自动配置和运行时洞察,使 Spring 更加易用。

  • Spring 应用程序可以使用 Spring Initializr 初始化,Spring Initializr 是基于 Web 的应用,并且为大多数 Java 开发环境提供了原生支持。

  • 在 Spring 应用上下文中,组件(通常称为 bean)可以使用 Java 或 XML 显式声明,可以通过组件扫描发现,还可以使用 Spring Boot 自动配置功能实现自动化配置。