Spring的核心概念:spring基础框架及技术生态
引入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基础框架及技术生态
下文给大家讲解的是开发springboot应用程序!
#Java面试##java##程序员##面试##springboot#java架构师技术分享