1.4 俯瞰Spring风景线
要想了解Spring的整体状况,只需查看完整版本的Spring Initializr Web表单上的那些复选框列表。它列出了100多个可选的依赖项,所以我不会在这里列出所有选项,也不会提供截图,但我鼓励你去看一看。同时,在这里我会简单介绍一些重点的项目。
1.4.1 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。
1.4.2 Spring Boot
我们已经看到了Spring Boot的很多优势,包括starter依赖和自动配置。在本书中,我们会尽可能多地使用Spring Boot,并避免任何形式的显式配置,除非显式配置是绝对必要的。除了starter依赖和自动配置,Spring Boot还提供了大量其他有用的特性:
● Actuator能够洞察应用运行时的内部工作状况,包括指标、线程dump信息、应用的健康状况以及应用程序可用的环境属性;
● 灵活的环境属性规范;
● 在核心框架的测试辅助功能之上,提供了对测试的额外支持。
除此之外,Spring Boot还提供了一个基于Groovy脚本的编程模型,称为Spring Boot CLI[2]。使用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能够处理多种不同类型的数据库,包括关系型数据库(通过JDBC或JPA实现)、文档数据库(Mongo)、图数据库(Neo4j)等。在第3章,我们会使用Spring Data为Taco Cloud应用程序创建存储库。
1.4.4 Spring Security
应用程序的安全性一直是重要的话题,而且正在变得越来越重要。幸运的是,Spring有一个健壮的安全框架,名为Spring Security。
Spring Security解决了应用程序通用的安全性需求,包括身份验证、授权和API安全性。Spring Security的范围太大,在本书中无法得到充分的介绍,但是我们会在第5章和第12章中讨论一些最常见的使用场景。
1.4.5 Spring Integration和Spring Batch
一定程度上,大多数应用程序都需要与其他应用甚至本应用中的其他组件集成。在这方面,有一些应用程序集成的模式来解决这些需求。Spring Integration和Spring Batch为基于Spring的应用程序提供了这些模式的实现。
Spring Integration解决了实时集成问题,在实时集成中,数据在可用时马上就会得到处理。相反,Spring Batch解决的则是批处理集成的问题,在此过程中,数据可以收集一段时间,直到某个触发器(可能是一个时间触发器)发出信号表明是时候处理批量数据了,才会得到处理。我们会在第10章中研究Spring Integration。
1.4.6 Spring Cloud
应用程序开发领域正在进入新的时代,我们不再将应用程序作为一个部署单元的单体应用来开发,而是使用由微服务组成的多个独立部署单元来组合形成应用程序。
微服务是一个热门话题,解决了开发期和运行期的一些实际问题。然而,在这样做的过程中,它也面临着自己所带来的挑战。这些挑战将由Spring Cloud直面解决,Spring Cloud是使用Spring开发云原生应用程序的一组项目。
Spring Cloud覆盖了很多领域,这本书不可能面面俱到。关于对Spring Cloud的完整介绍,我推荐阅读Thomas Vitale的Cloud Native Spring in Action(Manning,2020年)。
1.4.7 Spring Native
Spring一个相对较新的进展是Spring Native项目。这个实验性的项目能够使用GraalVM原生镜像编译器将Spring Boot项目编译成原生可执行的文件,从而使镜像的启动速度显著加快,并且占用更小的空间。
关于Spring Native的更多信息,参见GitHub网站的spring-projects-experimental/spring- native代码库。