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以及实现接口的类的程序化和声明是事务管理。
网络
网络层主要包含网络、servlet、struts和组件。