翻译自Spring官方文档 4.1.2版本
一、Spring Framework构成##
Spring Framework根据功能不同大约可以分为20个模块。这些模块又可以分组为:核心容器(Core Container
), 数据访问/集成(Data Access/Integration
),网络(Web
), 面向切面编程(Aspect Oriented Programming
), 工具(Instrumentation
), 消息(Messaging
), and 测试(Test
)。
1.1 核心容器###
核心容器包含:spring-core
, spring-beans
, spring-context
, 和spring-expression
(Spring Expression Language)模块。
spring-core
和spring-beans
模块提供框架的基本组成部分,包括IoC 和Dependency Injection特性。BeanFactory是一个复杂的工厂模式的实现。它不需要你手动编码来实现单例并且允许你在实际的编程中将配置和对象间的依赖解耦。
spring-context
模块构建在spring-core
和spring-beans
模块的基础上:通过框架在存取对象的方式上是和JNDI注册类似的。Context模块继承Beans模块的特点并添加国际化支持(例如:resource bundles)、事件传播、资源加载、上下文的透明创建,例如:一个Servlet容器。Context模块同样也支持Java EE特性例如EJB,、JMX和基本的远程调用。ApplicationContext
接口是Context模块的中心点。
spring-expression
模块提供强大的表达式语言在运行时用来查询和操作对象图。它是在JSP 2.1规范中指定的unified expression language (unified EL)的扩展。这个语言支持设置和获取属性值,属性赋值,方法调用,访问数组、集合、索引,逻辑和算数运算,命名变量,根据名称从Spring的IoC容器取回对象。它还支持列表映射和选取就像普通的列表集合一样。
1.2 AOP和工具###
spring-aop
模块提供一个AOP 行业兼容的面向切面的编程实现允许你定义以下几个操作:例如定义方法拦截器、定义切点来清晰的分离功能不同的代码。通过使用源码级元数据的功能,你可以将行为信息融入在你的代码(记录日志这个最容易想到)。
独立的spring-aspects
模块集成了AspectJ。
spring-instrument
模块提供了类工具支持和类加载器实现,被用于一些应用程序服务器中。
1.3 消息###
Spring Framework 4包括了一个spring-messaging
模块,它具有一些主要的抽象例如:Message
、MessageChannel
、MessageHandler
和其他一些抽象一起充当基于消息的应用程序的基础。这个模块也包含了一组注解来映射消息到方法,类似于Spring MVC基于注解的编程方式。
1.4 数据访问/集成###
数据访问/集成层包括JDBC, ORM, OXM, JMS, 和Transaction等模块。
spring-jdbc
模块提供一个JDBC抽象层,消除了冗长的JDBC编码并且解析了数据库厂商特定的错误代码。
对于那些实现了特殊接口和你的POJO类,spring-tx
模块提供了编程式和声明式事务管理。
spring-orm
模块为流行的对象关系映射APIs提供了集成,包括:JPA, JDO, 和Hibernate。如果使用spring-orm
模块你可以使用这些O/R-mapping框架同时结合使用Spring提供的所有其他特性。例如:之前说到的声明式事务管理特性。
spring-oxm
模块提供了一个抽象层来支持Object/XML mapping的实现,例如:JAXB, Castor, XMLBeans, JiBX 和XStream。
spring-jms
模块包含了生产和消费信息的特性。从Spring Framework 4.1以后,它提供了与spring-messaging
模块集成。
1.5 网络###
网络层包括spring-web
, spring-webmvc
, spring-websocket
,和spring-webmvc-portlet
模块。
spring-web
模块提供了基本的面向网络的集成特性,例如:文件上传功能、初始化IoC容器可以使用Servlet监听器和一个面向网络的应用程序上下文。它也包含了Spring远程调用支持的网络相关的部分。
spring-webmvc
模块(也被叫做Web-Servlet模块)包含了为web应用程序设计的Spring的model-view-controller (MVC)实现。Spring的MVC框架在域模型(domain model)代码和web表单之间提供了一个清晰的划分,并且与Spring Framework的所有其他特性集成。
spring-webmvc-portlet
模块(也被叫做Web-Portlet模块)提供了MVC实现用来在门户环境(Portlet environment )中使用,借鉴了spring-webmvc
的功能。
1.6 测试###
spring-test
模块通过JUnit 或者 TestNG为Spring组件进行单元测试和集成测试提供了支持。它提供了ApplicationContexts
和那些上下文缓存的一致性加载。它也提供了模拟对象(mock objects)使你可以去测试你的代码在隔离的状态。
二、典型的完全成熟的Spring web application##
Spring的声明式事务管理特性使web应用程序完全是事务性的,就像你使用EJB管理事务那样。你的所有自定义业务逻辑可以被实现为简单的POJO(其实我对POJO还挺模糊)并且被Spring的 IoC 容器管理。额外的服务包括发送邮件并且验证是独立与web层的,这样允许你选择在哪里执行验证规则。Spring的ORM支持已经与JPA, Hibernate 和 JDO集成;例如,当使用Hibernate时,你可以继续使用你已有的映射文件和标准的Hibernate SessionFactory配置。表单控制器(Form controller)通过域模型(domain model)无缝的与web层集成,不再需要
ActionForms
或者其他类来将HTTP参数转换成你域模型里的值。