2.2 模块
2.2 框架模块
Spring Framework由大约20个按照不同功能划分的模块组成。如下图所示,这些模块被分组为核心容器、数据访问/集成、Web、AOP(面向切面编程)、Instrumentation、消息传递以及测试,如下图所示。
Figure 2.1. Overview of the Spring Framework
接下来的几节,针对每种功能列出了可用的模块,介绍各模块的组件名以及模块涵盖的主题。组件名即依赖管理工具中使用的组件ID。
2.2.1 核心容器
核心容器由spring-core
、spring-beans
、spring-context
、spring-context-support
和spring-expression
(Spring表达式语言)模块组成。
spring-core
和spring-beans
模块提供了框架的基本组成部分,包括控制反转和依赖注入。BeanFactory
是工厂模式的经典实现,免去了为得到单例亲自编写代码的必要,同时将配置和依赖描述从实际的程序逻辑中解耦。
Context(spring-context
)模块构建在Core模块和Beans模块的坚实基础之上。它是一种以框架式的方式访问对象的方法,有点像JNDI注册表。Context模块继承了Beans模块的功能,并增加了对国际化(例如使用资源绑定)、事件传播、资源加载以及上下文自动创建(例如通过一个Servlet容器)的支持。Context模块也支持Java EE的功能,如EJB,JMX和基本的远程处理。ApplicationContext
接口是Conext模块的焦点。spring-context-support
提供了将常用的第三方库集成到Spring程序上下文的支持,如为缓存可以集成EhCache、Guava、JCache,为发送邮件可以集成JavaMail,为任务调度可以集成CommonJ、Quartz,为模板引擎可以集成FreeMarker、JasperReports、Velocity。
spring-expression
模块提供了一个强大的在运行时查询和操作对象图的表达式语言,它是JSP2.1规范中规定的统一表达式语言(统一EL)的一个扩展,支持设置和获取属性值、分配属性、方法调用,支持访问数组、集合和索引的内容,支持逻辑和算术运算符、命名变量,支持从Spring的IoC容器中按名字检索对象,还支持list projection、list selection以及list aggregations。
2.2.2 AOP和Instrumentation
spring-aop
模块提供与AOP联盟兼容的面向切面编程实现,例如允许您定义方法拦截器和切入点以清晰地解耦应当分隔开的实现功能的代码。使用源码级的元数据功能,您还可以将行为信息以类似于.NET属性的方式整合到您的代码中。
独立的spring-aspects
模块用来集成AspectJ。
spring-instrument
模块提供了类检测仪(class instrumentation)和在特定应用服务器中使用的类加载器。spring-instrument-tomcat
模块包含Spring针对Tomcat的检测仪代理。
2.2.3 消息传递
Spring Framework 4包含一个spring-messaging
模块用作基于消息的应用程序的基础,模块中的核心抽象如Message
、MessageChannel
、MessageHandler
等来自Spring Integration项目。模块中还包含一组用于将消息映射到方法的注解,类似于基于Spring MVC注解的编程模型。
2.2.4 数据访问/集成
数据访问/集成层由JDBC、ORM、OXM、JMS以及事务模块组成。
spring-jdbc
模块提供了一个JDBC-抽象层,不需要进行繁琐的JDBC编码和分析数据库供应商特定的错误代码。
spring-tx
模块支持对实现了特殊接口的类以及您所有的POJO类提供编程式和声明式的事务管理。
spring-orm
模块为流行的对象关系映射API提供了集成层,包括JPA、JDO和Hibernate。使用spring-orm
模块,您可以将所有这些O/R映射框架与Spring提供的其他全部功能结合使用,如前面提到的简单声明式事务管理功能。
spring-oxm
模块提供了对多种[对象/XML映射](../V.Data_Access/21.Marshalling_XML using_O/X_Mappers.md)实现的支持,例如JAXB、Castor、XMLBeans、JiBX和XStream。
spring-jms
模块(Java消息传递服务)包含发送和接收消息的功能,自从Spring Framework 4.1版本,它可以与spring-messaging
模块集成。
2.2.5 Web
Web层由spring-web
、spring-webmvc
、spring-websocket
和spring-webmvc-portlet
模块组成。
spring-web
模块提供了基本的面向Web的集成功能,例如文件上传功能以及使用Servlet监听器对IoC容器进行初始化和面向Web的应用上下文的初始化。模块中还包括HTTP客户端和Spring支持远程功能的Web相关部分。
spring-webmvc
模块(也称为Web-Servlet模块)包含Spring的模型-视图-控制器(MVC)和Web应用程序的REST Web服务。Spring的MVC框架提供了领域模型代码和Web表单之间的清晰分离,并集成了Spring Framework的其他全部功能。
spring-webmvc-portlet
模块(也称为Web-Portlet模块)提供了在Portlet环境中使用的MVC实现,其功能和基于Servlet的spring-webmvc
模块一致。
2.2.6 测试
spring-test
模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试,它提供了对Spring的ApplicationContext
s一致的加载并缓存这些上下文的功能,还提供了Mock对象可以用来单独测试您的代码。