写点什么

Spring 的核心概念:Spring 基础框架及技术生态

  • 2023-06-15
    湖南
  • 本文字数:1596 字

    阅读完需:约 5 分钟

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

Spring 基础框架

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

我们先来看上图中位于底部的“核心容器”部分,该部分包含了一个容器所应该具备的主体功能,涉及基于依赖注入(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 基础框架之间的这种“内核→应用→扩展”的关系如图所示:

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

用户头像

加VX:bjmsb02 凭截图即可获取 2020-06-14 加入

公众号:程序员高级码农

评论

发布
暂无评论
Spring的核心概念:Spring基础框架及技术生态_Java_互联网架构师小马_InfoQ写作社区