写点什么

工作两年才真正搞懂 Spring 的核心概念:spring 基础框架及技术生态

作者:Java你猿哥
  • 2023-04-20
    湖南
  • 本文字数:2203 字

    阅读完需:约 7 分钟

引入 Spring Boot

在当下的互联网应用中,业务体系发展日益复杂,同时业务功能的开发往往伴随着需求的不断变化。以常见的电商类应用为例,其承载的业务功能复杂度以及快速迭代要求的开发速度,与 5 年前的同类业务系统,面临着诸多新的挑战。这些挑战中核心的一点就是快速高效地实现系统功能,同时保证代码持续可维护,这是一个非常现实且亟待解决的问题。


面对这样的挑战,我们仍需要保持开发过程的简单性,而这种简单性很大程度上来自开发框架。对于 Java EE 领域而言,Spring 无疑是当下最主流的开发框架。但从 Spring 的组成而言,实际上我们已经很难把它看作一个单独的框架,它是由一组框架所构成的生态系统。


在这个生态系统中,SpringBoot 作为 Spring 家族的一员,在传统 Spring 框架的基础上做了创新和优化,将开发人员从以往繁琐的配置工作中解放了出来,并提供了大量即插即用的集成化组件,从而减少了开发过程中各种组件之间复杂的整合,提高了开发效率,降低了维护成本。


Spring Boot 是一款集成性的开源框架,内部整合了很多第三方组件和框架。这些组件和框架应用如此之广泛,以至于大家反而对如何更好地使用 Spring Boot 自身的功能特性并不是很重视。事实上,Spring Boot 自身的功能特性同样非常丰富,而且在使用上也存在一些最佳实践。

本章作为全书的开篇,将简要介绍 Spring Boot 的基本概念和功能体系,并给出实战案例。

Spring 核心概念

随着 Spring 的不断发展,越来越多的技术体系融入了 Spring 生态中,从而诞生了一大批开发框架。但这些开发框架都是从 Spring 基础框架逐步演进而来的,本节将从 Spring 基础框架所包含的依赖注入和面向切面等核心概念开始,对整个 Spring 家族技术生态进行简要梳理。


Spring 基础框架


Spring 基础框架由 Rod Johnson 在 2003 年设计并实现,自诞生之初就被认为是一种容器,其整体架构如图 1-1 所示。

图1-1 Spring基础框架整体架构


我们先来看图 1-1 中位于底部的“核心容器”部分,该部分包含了一个容器所应该具备的主体功能,涉及基于依赖注入(Dependency Injection,DI)的 JavaBean 处理机制、面向切面编程(Aspect Oriented Programming,AOP)、上下文(Context)以及 Spring 自身所提供的表达式语言(SpringExpression Language,SpEL)等辅助功能。对于系统开发而言,我们需要在系统运行时基于某个对象的使用需求,动态提供它所依赖的其他对象,而这一点可以通过依赖注入实现。Spring 会在适当的时机创建一个 Bean,然后像注射器一样把它注入目标对象中,这样就完成了对各个对象之间关系的控制。可以说,依赖注入是开发人员使用 Spring 基础框架的基本手段,我们通过依赖注入获取所需的各种 Bean。


Spring 为开发人员提供了三种不同的依赖注入类型,分别是字段注入、构造器注入和 Setter 方法注入。

而所谓的切面,本质上解决的是关注点分离的问题。在面向对象编程的世界中,我们把一个应用程序按照职责和定位拆分成多个对象,这些对象构成了不同的层次。而面向切面编程可以说是面向对象编程的一种补充,目标是将一个应用程序抽象成各个切面,这样就可以将其单独抽象为独立的模块进行开发和维护。Spring 为开发人员提供了连接点(JoinPoint)、通知(Advice)、切点(PointCut)和切面(Aspect)等一系列组件,帮助他们构建面向切面的编程模型。


我们再来看图 1-1 的上半部分,这里包含了构建应用程序所需要的两大功能组件,即数据访问和 Web 服务,它们也是我们日常开发中最常用的组件。这两大部分组件中包含的内容非常多,而且充分体现了 Spring 的集成性。也就是说,框架内部整合了业界主流的数据库驱动、消息中间件、ORM 框架等各种工具,开发人员可以根据需要灵活地替换和调整自己想要使用的工具。


从开发语言上讲,虽然 Spring 最广泛的应用场景是在 Java EE 领域,但当前的 5.x 版本也支持 Kotlin、Groovy 以及各种动态开发语言。


Spring 技术生态

我们通过 Spring 的官方网站来看一下 Spring 家族技术生态的全景图。在 Spring 的主页中,有七大核心技术体系。


微服务架构:以 Spring Boot、Spring Cloud 为代表的一套完整构建微服务系统的技术体系。

响应式编程:内置了 Project Reactor 响应式编程框架的面向 Web 开发、数据访问等常见功能的全栈响应式技术体系。

云原生:以 Spring Cloud 为代表的一组满足云原生架构需求的分布式技术体系。

Web 应用:以 Spring WebMVC 为代表的一批实现 REST API 的 Web 技术体系。

Serverless 架构:以 Spring Cloud Function 为代表的 FaaS(Functionas a Service)技术体系。

事件驱动:以 Spring Cloud Stream 为代表的面向事件和消息处理的技术体系。

批处理:以 Spring Batch 为代表的轻量级离线批处理技术体系。


可以看到,上述技术体系有各自的侧重点,但也有一些交集。我们现在能看到的所有 Spring 家族技术体系都是从 Spring 基础框架逐步演进而来的。


Spring 技术体系发展到现在,Spring 基础框架更多扮演着内核的角色,而不是直接面向应用开发。在日常开发过程中,如果构建单块 Web 服务,可以采用 Spring Boot。而如果想要开发微服务架构,那么就需要使用 Spring Cloud。


事实上,想要使用 Spring Cloud,必须首先掌握 Spring Boot,因为 SpringBoot 是开发单个微服务的基础。它们与 Spring 基础框架之间的这种“内核→应用→扩展”的关系如图 1-2 所示。

图1-2 Spring技术生态与Spring基础框架之间的关系示意图


本文不对 Spring 中的所有技术体系全面地展开讲解,而是重点关注 Spring Boot。Spring Boot 是 Spring 中顶级的子项目,并且已经发展为 JavaEE 领域开发 Web 应用程序的首选框架。


本文给大家讲解的内容是 spring 的核心概念:spring 基础框架及技术生态


用户头像

Java你猿哥

关注

一只在编程路上渐行渐远的程序猿 2023-03-09 加入

关注我,了解更多Java、架构、Spring等知识

评论

发布
暂无评论
工作两年才真正搞懂Spring的核心概念:spring基础框架及技术生态_Java_Java你猿哥_InfoQ写作社区