1.3 Spring架构图

Spring的产生,主要是为了帮助用户简化开发流程,提高代码生产效率。利用合理的配置文件,可实现程序的控制。同时,为了方便开发者编写,又提供了方便的事务处理能力以及第三方框架整合能力。Spring的整体架构如图1-6所示。

图1-6 Spring整体架构

1.核心容器

核心容器(Core Container)包括Beans模块、Core模块、Context模块和Expression Language模块。

Beans模块:提供框架的基础部分,主要用于实现控制反转(依赖注入)功能。其中,Bean Factory是容器的核心部分,其本质是工厂设计模式实现,提倡面向接口编程,对象间的关系由框架通过配置关系进行管理,所有的依赖都由Bean Factory来维护。

Core模块:封装了框架依赖的最底层部分,包括资源访问、类型转换和其他的常用工具类。

Context模块:以Core和Bean模块为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期等,核心接口是ApplicationContext。

Expression Language(EL)模块:表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器、命名变量,支持算术和逻辑运算,支持从Spring容器获取Bean,也支持列表透明、选择和一般的列表聚合等。利用表达式语言,可以更加灵活地控制配置文件。

2.切面编程模块

切面编程模块包含AOP模块、Aspects模块和Instrumentation模块。

AOP(Aspect Oriented Programming)模块:符合AOP Alliance规范的面向切面编程实现,提供了如日志记录、权限控制、性能统计等通用功能和业务逻辑分离技术,能动态地把这些功能添加到需要的代码中,从而降低业务逻辑和通用模块的耦合。

Aspects模块:提供了AspectJ的集成,利用AspectJ表达式可以方便地实现切面管理。

Instrumentation模块:是Java 5之后提供的特性。使用Instrumentation,开发者可以构建一个代理,用来监测运行在JVM上的程序。监测一般是通过在执行某个类文件之前,对该类文件的字节码进行适当修改进行的。

3.数据访问/集成模块

数据访问/集成(Data Access/Integration)模块包含事务管理模块、JDBC模块、ORM模块、OXM模块和JMS模块。

事务管理模块:用于Spring事务管理操作,只要是Spring管理的对象,都可以利用此事务模块进行控制。支持编程和声明式两类方式的事务管理。

JDBC模块:提供了JDBC的操作模板,利用这些模板可以消除传统冗长的JDBC编码和必需的事务控制,同时可以使用Spring管理事务,无须额外控制事务。

ORM模块:提供了实体层框架的无缝集成,包括Hibernate、JPA、MyBatis等,同时可以使用Spring实现事务管理,无须额外控制事务。

OXM模块:提供了Object/XML映射,可以将Java对象映射成XML数据,或者将XML数据映射成Java对象。Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。

JMS模块:用于JMS(Java Messaging Service)组件整合,提供了一套消息“生产者-消费者”处理模型。JMS可以用于在两个应用程序之间或分布式系统中,实现消息处理与异步通信。

4.Web(MVC / Remoting)模块

Web(MVC / Remoting)模块包含Web模块、Servlet模块、MVC框架模块和Porlet模块。

Web模块:提供了基础Web功能,如多文件上传、集成IoC容器、远程过程访问(RMI、Hessian、Burlap)以及Web Service支持,并提供了RestTemplate类来进行Restful Services访问。

Servlet模块:提供了Spring MVC Web框架实现。Spring MVC框架提供了基于注解的请求资源注入,可以更简单地进行数据绑定、数据验证和一套非常易用的JSP标签,完全无缝地与其他Spring技术进行协作。

MVC框架模块:提供了与常用MVC开发框架的整合,如Struts、JSF等。

Porlet模块:Portal是一个基于Web的应用,它能提供个性化、单点登录、不同源的内容聚合和信息系统的表示层集中。聚合是整合不同Web页面源数据的过程。

5.Test模块

支持JUnit和Test测试框架,而且额外提供了一些基于Spring的测试功能。例如,可在测试Web框架时模拟HTTP请求功能。或者启动容器,实现依赖注入管理。

Spring本身提供了对象管理容器,由于Java EE项目都是构建在Web容器之上的,所以在实际开发过程中经常可看到如图1-7所示的运行场景。

通过图1-7可以发现,在Spring框架上进行项目构建过程之中,是以Spring的核心容器实现的基本结构,而后利用Spring中提供的系列整合技术根据自身项目的需求简化ORMapping组件的开发,再利用AOP与AspectJ实现业务层事务控制,对于Web端可以与Struts、JSF等常用开发框架整合,也可以直接使用SpringMVC进行整合。

图1-7 Spring实际运行场景