Spring快速入门
上QQ阅读APP看书,第一时间看更新

2.1 Spring框架介绍

本节主要对Spring框架进行简单介绍,了解框架起源、框架组成结构,对Spring框架有一个大概的认识。

2.1.1 起源

首先,追根溯源,了解它是怎么来的。在Spring框架出现之前,使用EJB开发J2EE应用可没那么容易。EJB要严格地实现各种不同类型的接口,代码复用性低,配置也比较复杂和单调,同样使用JNDI进行对象查找的代码也是单调而枯燥,而且EJB不容易学,开发效率低。Spring出现的初衷就是为了解决类似的这些问题。

Spring最大的目的之一就是使J2EE开发更加容易。同时,Spring不仅仅是一个单层的框架,而是类似一个平台或者生态体系。在这个平台或者生态体系中,可以将Struts、Hibernate等单层框架最佳的方式融合在一起,为企业级应用提供完美的解决方案。Spring的形成,最初来自Rod Jahnson所著的一本很有影响力的图书《Expert One-on-One J2EE Design and Development》(出版于2002年),就是在这本书中第一次出现了Spring的一些核心思想。另外,《Expert One-on-One J2EE Development without EJB》更进一步地阐述了在不使用EJB开发J2EE企业级应用的一些设计思想和具体的做法。

2.1.2 简介

了解了Spring框架的起源之后,下面来了解一下Spring到底是什么。用一句话概括,Spring就是一个开源的轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。下面来分析一下这句话。

(1)开源:因为开源、免费,用户无须经过任何人同意即可修改代码,可控制性强,不受他人限制。

(2)轻量级:从大小与开销两方面而言,Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布,并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的,Spring应用中的对象不依赖于Spring的特定类。

(3)控制反转:软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分模块的一个准则就是高内聚低耦合,Spring通过控制反转技术降低了耦合度。

(4)面向切片:Spring支持面向切片的编程,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发,应用对象只需实现业务逻辑,它们并不负责(甚至是意识)其他系统级关注点,例如日志或事务支持。

(5)容器:容器就是用来装东西的。Spring容器包含并管理应用对象的配置和生命周期。

(6)框架:Spring可以将简单的组件配置、组合成为复杂的应用,相当于是一个脚手架,开发者要做的就是把组件放进去,实现业务逻辑。

2.1.3 框架结构

Spring框架结构如图2-1所示。

图2-1

Spring由20多个模块组成,可以分为核心容器(Core Container)、数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP,Aspect Oriented Programming)、设备(Instrumentation)、消息发送(Messaging)和测试(Test)。

1.核心容器

核心容器包含spring-core、spring-beans、spring-context、spring-context-support和spring-expression(Spring Expression Language)这些模块。

spring-core和spring-beans构成了框架最基础的部分,包括控制反转和依赖注入功能。

spring-context是基于spring-core和spring-beans构建的,提供了一种以框架风格来访问对象的方式,类似于JNDI注册。ApplicationContext接口是spring-context的焦点。

spring-context-support为集成第三方库(如定时器Quartz)提供支持。

spring-expression提供了一种强大的表达式语言,可以在运行时查询和操作对象。

2.AOP

spring-aop模块提供了一个AOP面向切面编程的实现。

spring-aspects模块提供与AspectJ的集成。

spring-instrument模块提供一些类级的工具支持和ClassLoader级的实现,用于服务器。spring-instrument-tomcat模块针对tomcat的instrument实现。

3.消息发送

从Spring 4开始包含了一个spring-messaging模块,对Spring集成项目Message、MessageChannel和MessageHandler进行了重要的抽象,是基于消息发送应用的基础。

4.数据访问/集成

数据访问/集成层包含JDBC(spring-jdbc)、ORM(spring-orm)、OXM(spring-oxm)、JMS(spring-jms)和事务(spring-tx)模块。

5.Web

Web层包含spring-web、spring-webmvc、spring-websocket和spring-webflux模块。其中,spring-web提供了面向Web集成的基本特性,比如文件上传功能。Spring-webmvc模块包含了Spring的MVC和REST Web Service实现。spring-webflux是一个新的非堵塞函数式Reactive Web框架,可以用来建立异步的、非阻塞、事件驱动的服务,并且扩展性非常好。

6.测试

Spring-test模块支持Spring组建JUnit和TestNG的单元测试和集成测试。