Spring
框架参考文档(
3.2.4
)
第一部分
Spring
框架概述
Spring
框架是一个轻量级的解决方案以及潜在的一站式企业级应用。但是
Spring
又是模块化的,各个模块又是相互解耦的。可以在
Struts
的基础上使用
IOC
容器,也可以同时使用集成的
Hibernate
和
jdbc
。
Spring
框架支持声明式事务,还可以通过
RMI
或者
Web
服务远程访问逻辑层,以及各种类型的持久化数据的方式。它提供了功能强大的
MVC
框架,将
AOP
非侵入的植入到应用程序中。
Spring
被设计成非侵入式的,逻辑代码与
Spring
框架本身没有关系。在集成层(比如数据访问层)会依赖于第三方数据访问技术或者
Spring
架包。然而
Spring
比较容易将依赖包和代码库解耦。
这份文档是描述
Spring
功能的一个参考文档。关于本文档,如果你有任何意见请及时的通过邮件或者论坛的方式联系我们。
1. Spring
框架的介绍
Spring
框架是一个全面支持
java
应用开发的平台,开发者只需关注自己的应用,从而减轻开发者的负担。
Spring
可以通过普通的
POJO
对象来构建应用程序,从而实现非侵入式的企业级应用服务。非侵入式可以应用于
J2SE
以及
J2EE
。
下面列举几个作为应用程序员怎样才能充分利用
Spring
平台的优点:
. java
方法在数据库事务中执行时,最好不要涉及到事务
API
.
本地
java
方法进行远程调用,最好不要调用远程
API
.
本地
java
方法进行管理操作,最好不要调用
JMXAPI
.
本地
java
方法进行消息处理,最好不要调用
JMSAPI
1.1
依赖注入和控制反转
背景
“
什么才是控制反转?
”
,
2004
年,马丁
.
福勒在他的个人网站上关于
IOC
提出了这个问题。福勒建议将控制反转改为依赖注入,这样更加简洁明了。关于
IOC
和
DI
可以参考他的博文
http://martinfowler.com/articles/injection.html
。
Java
应用程序,无论是小的
applets
还是多层的企业级程序,都是松散耦合的代名词,通常由相互关联的对象形成符合要求的应用程序。所以在应用程序中对象是彼此依赖的。
虽然
JAVA
平台为应用程序的开发提供了丰富的功能,但是任然缺乏一键构造整体模块的方式,往往将需要开发者或者架构师自己来构建。诚然,开发者可以通过设计模式(例如工厂、抽象工厂、装饰器等)构造不同的类或者实例来实现应用程序。然而这些模式是比较简单的:最好的做法是定义模式的名称包括这个模式能做什么的描述,可以应用的范围以及可能存在的问题等等。设计模式是通用的,开发者必须要在应用程序中自己实现。
Spring
的
IOC
为解决模块化问题,提供了一个比较规范的解决方案,可以使用不同的组件构建一个完整的应用程序。
Spring
定义的
IOC
可以在应用程序中得到综合的应用。许多项目团队使用
Spring
框架来构建健壮的可维护的应用程序。
1.2
模块
Spring
框架总共包括
20
个模块,模块主要包括:核心容器、数据访问和集成、
AOP
(面向切面编程)、测试等。
Spring
框架的模块示意图
.
核心容器
核心容器包括
javabeans
、核心、上下文,表达式语言模块。
Bean
和核心模块是
Spring
框架的基础模块,包括
IOC
和
DI
功能。
BeanFactory
比较精致的实现了工厂设计模式,它可以根据实际的应用逻辑代码区去耦的配置。
上下文模块是建立在核心和
bean
模块的基础之上的:这就意味着,基于框架式的对象访问,就有点类似于
JNDI
注册表。上下文模块继承了
bean
模块所有的功能,并且还扩展支持国际化
(
例如资源包的使用
)
、事件传播、资源加载、以及可以通过
Servlet
容器透明的创建上下文。上下文模块还支持
J2EE
特性,比如
EJB
、
JMX
和远程登录。
ApplicationContext
接口是上下文模块中使用最多的。
EL
模块提供了强大的表达式查询语言和运行中的操作对象图。它是在
JSP2.1
规范中统一定义的表达式语言。
EL
表达式支持设置和获取属性值、属性赋值、方法调用、通过数组访问上下文、集合和索引、逻辑和算术运算符、命名变量、以及通过
IOC
容器检索
Bean
的名称。它还支持链表投影和选择,以及常见的链表汇总。
.
数据访问和集成
数据访问
/
集成层包括
JDBC
,
ORM
,
OXM
,
JMS
和事务模块。
JDBC
模块提供了
JDBC
的抽象层,用来消除繁琐的
JDBC
代码以及用于解析数据库厂商的特有的校验代码。
ORM
模块对比较流行的
ORM
框架提供了集成,包括
JPA
、
JDO
、
Hibernate
、
IBatis
。结合所有
Spring
其他的功能特性,利用
ORM
封装包,你可以使用所有这些
O/ R
映射框架,如前面提到的简单声明式事务
管理
功能。
OXM
模块提供抽象层支持对象到
XML
的
映射以实现
JAXB
、
Castor
、
XMLBeans
、
JiBX
和
XStream
。
Java
消息传递服务
(JMS)
模块能够生成生产和消费消息。
事务模块支持对所有的
POJO
以及实现接口的类的程序化和声明是事务管理。
.
网络
网络层主要包含
Web
、
Web-Servlet
、
Web-Struts
、
Web-Portlet
(Web
组件
)
。
Spring
的
Web
模块具有
Web
方向的集成特性,比如文件上传、
Servlet
监听器初始化
IOC
容器以及
Web
方向的上下文环境。
Spring
同样也包含于
Web
相关的部分:远程处理。
Web-Servlet
主要包含
Spring
针对于
Web
应用的
SpringMVC
。
SpringMVC
实现了模型与表单的完全解耦,并且集成了
Spring
所有其他的功能。
Web-Struts
主要包含一些对比较经典
Struts
的
web
层支持的集成类,但是从
Spring3.0
开始已经被弃用。主要考虑可以迁移应用到
Struts2.0
以及
Spring
的集成或者
SpringMVC
。
Web-Portlet
模块主要包含:组件环境对
MVC
的支持以及对
Web-Servlet
的支持。
.
面向切面编程
Spring
的
AOP
模块允许自定义面向切面编程,比如将方法拦截与切入点完全解耦的分离。