Spring是一个于2003年兴起的轻量级的Java开源开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。Spring让开发人员有更多的精力投入到业务逻辑开发中,而不需要将其应用程序绑定到特定的部署环境,是为了降低企业应用开发的复杂性而创建的。Spring不是创造轮子(技术、框架),而是使现有的轮子运转得更好的工具。可以把Spring理解成一个大容器,这个容器可以整合现有的各种技术框架。Spring框架的主要优势是方便各种框架集成,降低了Java EE开发的难度。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。Spring的用途不限于服务器端应用程序的开发。
Spring框架提供了很多子模块供开发人员使用。
Spring是一个大容器,可以集成各种技术。如图1-1所示是Spring支持的各种技术。
图1-1 Spring支持的技术体系
下面依次介绍Spring支持的各种技术。
(1)Core Container
Spring的核心容器由Beans、Core、Context、SpEL等模块组成。所有Spring的其他模块都是建立在Core Container基础模块上的。该模块规定了创建和维护Bean的方式,提供了控制反转(IoC)和依赖注入(DI)等特性。
(2)Data Access/Integration
数据访问/集成模块提供了对JDBC、ORM、OXM、JMS和Transaction等模块的集成。使主流的ORM框架,持久化框架和消息中间件可以很方便地集成到Spring中,降低开发人员对这些框架的维护成本,提升了开发效率。
(3)Web模块
Web模块提供了对Web开发相关技术的集成,对开发模型-视图-控制器(MVC)项目提供便利。
(4)AOP模块
AOP模块提供了AOP联盟提倡的面向切面编程的实现环境。AOP将代码按功能进行分离,降低了模块间代码的耦合度。
(5)Test模块
Test模块支持JUnit和TestNG等单元测试模块的集成,还提供了mock对象,使开发人员可以更加独立的测试代码。
(1)管理依赖的资源
在企业开发中,经常需要管理各种配置文件,如JDBC连接配置文件,ORM配置文件等。可以通过Spring管理这些文件。如加载JDBC的配置文件jdbc.properties就可以使用如下代码方式配置Spring,这样Spring启动时会在此路径下自动搜索名称为jdbc.properties的配置文件,并将其加载到内存中:
<context:property-placeholder location="classpath*:jdbc.properties"/>
(2)Bean管理
一个企业项目中,会有很多Bean,每次都手动创建和管理这些Bean的对象是很低效的。Spring提供了管理Bean的IoC容器,并在需要用到相关Bean的时候,提供依赖注入(DI)将相关的Bean注入。
(3)事务管理
Spring提供的事务管理,使开发人员在做数据库操作时,无须再手动执行对数据库的提交或回滚操作,并且Spring还提供了对事务传播的支持,可以实现更加复杂的事务嵌套的逻辑,对数据一致性提供了更好的支持。
Spring的使用场景远不止这里提到的三点,更多Spring使用场景,请见Spring系统集成篇。
Spring和Spring MVC两者名字类似,但是两者却有着本质的不同。Spring是一个巨大的容器,可以集成各种技术。Spring MVC是一个Web技术,Spring MVC可以集成到Spring中。用数学上集合的概念来解释,Spring MVC是Spring的一个子集。
截止本书出版,Spring最新版本已经升级到了5.1版本。Spring 5相比于Spring之前的历史版本,带来了以下新的特性:
· Spring 5整个框架基于Java 8
· 支持HTTP/2
· Spring Web MVC支持最新API
· Spring WebFlux响应式编程
· 支持Kotlin函数式编程
更多有关Spring 5的高级特性请见Spring 5高级特性篇。