1.4 俯瞰Spring风景线

1.4 俯瞰Spring风景线

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

1.4.1 Spring核心框架

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

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

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

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

1.4.2 Spring Boot

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

  • Actuator能够洞察应用运行时的内部工作状况,包括指标、线程dump信息、应用的健康状况以及应用可用的环境属性;
  • 灵活的环境属性规范;
  • 在核心框架的测试辅助功能之上提供了对测试的额外支持。

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

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

1.4.3 Spring Data

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

此外,Spring Data能够处理多种不同类型的数据库,包括关系型数据库(JPA)、文档数据库(Mongo)、图数据库(Neo4j)等。在第3章中,我们将使用Spring Data为TacoCloud应用程序创建repository。

1.4.4 Spring Security

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

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

1.4.5 Spring Integration和Spring Batch

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

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

1.4.6 Spring Cloud

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

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

Spring Cloud覆盖了很多领域,本书不可能面面俱到,我们将在第13~15章中研究Spring Cloud的一些常见组件。要更全面地研究Spring Cloud,我建议阅读John Carnell的SpringMicroservices in Action一书^1(Manning,2017)。