1.1.1 Spring基础框架
Spring基础框架由Rod Johnson在2003年设计并实现,自诞生之初就被认为是一种容器,其整体架构如图1-1所示。
图1-1 Spring基础框架整体架构
我们先来看图1-1中位于底部的“核心容器”部分,该部分包含了一个容器所应该具备的主体功能,涉及基于依赖注入(Dependency Injection,DI)的JavaBean处理机制、面向切面编程(Aspect Oriented Programming,AOP)、上下文(Context)以及Spring自身所提供的表达式语言(Spring Expression 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以及各种动态开发语言。