1.2 Spring家族生态
Spring框架自2003年由Rod Johnson设计并实现以来,经历了多个重大版本的发展和演进,已经形成了一个庞大的“家族式技术生态圈”。目前,Spring已经是Java EE领域非常流行的开发框架,在全球各大企业中都得到了广泛应用。本节将梳理整个Spring家族中的技术体系,以及各种功能齐全的开发框架。
让我们通过Spring的官方网站来看一下Spring家族技术生态的全景图,如图1-2所示。
可以看到,这里罗列了Spring框架的七大核心技术体系,分别是微服务架构、响应式编程、云原生、Web应用、Serverless架构、事件驱动以及批处理。
一方面,这些技术体系各自独立但也有一定交集,例如微服务架构往往会与基于Spring Cloud的云原生技术结合在一起使用,而微服务架构的构建过程也需要依赖于能够提供RESTful风格的Web应用程序等。
另一方面,除了具备特定的技术特点,这些技术体系也各有其应用场景。例如,如果我们想要实现日常报表等轻量级的批处理任务,而又不想引入Hadoop这套庞大的离线处理平台,那么使用基于Spring Batch的批处理框架是一个不错的选择。再比方说,如果想要实现与Kafka、RabbitMQ等各种主流消息中间件的集成,但又希望开发人员不需要了解这些中间件在使用上的差别,那么使用基于Spring Cloud Stream的事件驱动架构是首选,因为这个框架对外提供了统一的API,从而屏蔽了内部各个中间件在实现上的差异性。
图1-2 Spring家族技术体系(来自Spring官网)
当然,所有我们现在能看到的Spring家族技术体系都是在Spring Framework的基础上逐步演进而来的。在介绍上述技术体系之前,我们先简单对其进行回顾。Spring Framework的整体架构如图1-3所示。
图1-3 Spring Framework的整体架构
Spring从诞生之初就被认为是一种容器,图1-3中的核心容器部分就包含一个容器所应该具备的核心功能,涉及1.1节中介绍的基于依赖注入机制的Bean、AOP、Context,以及Spring自身所提供的表达式工具Instrument等一些辅助功能。
图1-3最上面的就是构建应用程序所需要的两大核心功能组件,也是我们日常开发中最常用的组件,即数据访问和Web服务。这两大功能组件中包含的内容非常多,而且充分体现了Spring Framework的集成性。也就是说,框架内部整合了业界主流的数据库驱动、消息中间件、ORM框架等各种工具,开发人员可以根据需要灵活地替换和调整自己想要使用的工具。
从开发语言上讲,虽然Spring最广泛的一个应用场景是在Java EE领域,但在最新的版本中也支持Kotlin、Groovy以及各种动态开发语言。
本书无意对Spring中的所有七大技术体系做全面的展开。在日常开发过程中,如果要构建单块Web服务,可以采用Spring Boot。如果想要开发微服务架构,那么需要使用基于Spring Boot的Spring Cloud,而Spring Cloud同样内置了基于Spring Cloud Stream的事件驱动架构。同时,在这里应特别强调的是响应式编程技术。响应式编程是Spring 5引入的最大创新,代表了一种系统架构设计和实现的技术方向。因此,本书也将从Spring Boot、Spring Cloud以及Spring响应式编程这三大技术体系进行切入,看看Spring具体能够为我们解决开发过程中的哪些问题。