OOAD小组报告 小组成员介绍: 组长:李璇 0461096 组员 贺之讯0461098 刘芳 0461108 武冰冰0461116 王昱 0461121 戴旭斐0461127 目录 Spring框架简介(李璇)- --第2页 Spring和 Struts的对比(刘芳)-- 第8页 Spring在项目中的配置(武冰冰)---第20页 Spring核心技术介绍(王昱) 第37页 Spring中 Hibernate的配置(戴旭斐) 第43页 Spring中的 webflow应用(贺之讯)--- --第61页
OOAD 小组报告 小组成员介绍: 组长:李璇 0461096 组员: 贺之讯 0461098 刘芳 0461108 武冰冰 0461116 王昱 0461121 戴旭斐 0461127 目录 Spring 框架简介(李璇)-------------------------------------------------第 2 页 Spring 和 Struts 的对比 (刘芳) ---------------------------------------第 8 页 Spring 在项目中的配置(武冰冰)---------------------------------------第20页 Spring 核心技术介绍(王昱)---------------------------------------------第 37页 Spring 中 Hibernate 的配置(戴旭斐)----------------------------第 43 页 Spring 中的 webflow 应用(贺之讯)------------------------------第 61 页
SPRING框架总体介绍 作者:0461096 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架 的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE应用程序开发提供集成的框架。 在这篇由三部分组成的 Spring系列的第1部分中,我将介绍 Spring框 架。我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模 块: Spring面向方面编程(AOP)和控制反转(IOC)容器。接着将使用几个 示例演示IOC容器在典型应用程序用例场景中的应用情况。这些示例还将成为 本系列后面部分进行的展开式讨论的基础,在本文的后面部分,将介绍 Spring 框架通过 Spring AOP实现AOP构造的方式。 1.1 Spring框架 Spring框架是一个分层架构,由7个定义良好的模块组成。 Spring模块构建在 核心容器之上,核心容器定义了创建、配置和管理bean的方式,如图1所示 Spring ORM Spring Web Bats support Subpart resolver JDO support Web tides Spring Web g Web MVC Spring Context oP infrastructure Spring DAO aton context Transaction infrastructure /Export JOBC support DAO support JNDL EJB support and Spring Core Supporting unites Bean container 图1. Spring框架的7个模块
一、SPRING 框架总体介绍 作者:0461096 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架 的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 在这篇由三部分组成的 Spring 系列 的第 1 部分中,我将介绍 Spring 框 架。我先从框架底层模型的角度描述该框架的功能,然后将讨论两个最有趣的模 块:Spring 面向方面编程(AOP)和控制反转 (IOC) 容器。接着将使用几个 示例演示 IOC 容器在典型应用程序用例场景中的应用情况。这些示例还将成为 本系列后面部分进行的展开式讨论的基础,在本文的后面部分,将介绍 Spring 框架通过 Spring AOP 实现 AOP 构造的方式。 1.1 Spring 框架 Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在 核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。 图 1. Spring 框架的 7 个模块
组成 Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个 或多个模块联合实现。每个模块的功能如下: ☆核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要组件 是 Bean Factory,它是工厂模式的实现。 Bean Factory使用控制反转(IOC)模 式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ☆ Spring上下文: Spring上下文是一个配置文件,向 Spring框架提供上 下文信息。 Spring上下文包括企业服务,例如NDI、EJB、电子邮件、国际化、 校验和调度功能。 ☆ Spring AOP:通过配置管理特性, Spring AoP模块直接将面向方面的编 程功能集成到了 Spring框架中。所以,可以很容易地使 Spring框架管理的任 何对象支持AOP。 Spring AOP模块为基于 Spring的应用程序中的对象提供了 事务管理服务。通过使用 Spring AOP,不用依赖BJB组件,就可以将声明性事 务管理集成到应用程序中。 ☆ Spring dao: JDBC DAO抽象层提供了有意义的异常层次结构,可用该 结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了 错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。 Spring dao的面向JDBC的异常遵从通用的DAO异常层次结构。 ☆ Spring OrM: Spring框架插入了若干个ORM框架,从而提供了ORM 的对象关系工具,其中包括JDO、 Hibernate和 iBatis SQL Map。所有这些都遵 从 Spring的通用事务和DAO异常层次结构。 ☆ Spring Web模块:Web上下文模块建立在应用程序上下文模块之上,为 基于web的应用程序提供了上下文。所以, Spring框架支持与 Jakarta Struts的 集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 ☆ Spring Mvc框架:MVC框架是一个全功能的构建Web应用程序的 MVC实现。通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大 量视图技术,其中包括JSP、Ⅴ elocity、Tles、iext和POl Spring框架的功能可以用在任何J2EE服务器中,大多数功能也适用 于不受管理的环境。 Spring的核心要点是:支持不绑定到特定JEE服务的可 重用业务和数据访问对象。毫无疑问,这样的对象可以在不同J2EE环境(Web 或EJB)、独立应用程序、测试环境之间重用。 二、IOC和AOP 控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是 描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个 或多个模块联合实现。每个模块的功能如下: ☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件 是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模 式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 ☆ Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上 下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、 校验和调度功能。 ☆ Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编 程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任 何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了 事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事 务管理集成到应用程序中。 ☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该 结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了 错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。 Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。 ☆ Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵 从 Spring 的通用事务和 DAO 异常层次结构。 ☆ Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为 基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的 集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。 ☆ Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大 量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。 Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用 于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可 重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。 二、 IOC 和 AOP 控制反转模式(也称作依赖性介入)的基本概念是:不创建对象,但是 描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述
哪一个组件需要哪一项服务。容器(在 Spring框架中是IOC容器)负责将 这些联系在一起。 在典型的IOC场景中,容器创建了所有对象,并设置必要的属性将它们连 接在一起,决定什么时间调用方法。下表列出了IOC的一个实现模式 服务需要实现专门的接口,通过接口,由对象提供这些 类服务,可以从对象查询依赖性(例如,需要的附加服务) 型1 类型2通过 JavaBean的属性(例如 setter法)分配依赖性 类型3依赖性以构造函数的形式提供,不以 JavaBean属性的 形式公开 Spring框架的IOC容器采用类型2和类型3实现。 21面向方面的编程 面向方面的编程,即AOP,是一种编程技术,它允许程序员对横切关注 点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。 AOP和IOC是补充性的技术,它们都运用模块化方式解决企业应用程序 开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放 在所有方法和Java类中才能实现日志功能。在AOP方式中,可以反过来将 日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优 势就是Java类不需要知道日志服务的存在,也不需要考虑相关的代码。所以 用 Spring AOP编写的应用程序代码是松散耦合的 AOP的功能完全集成到了 Spring事务管理、日志和其他各种特性的上下 文中。 软件系统通常由多个组件构成,每个组件负责一个特定的功能领域。但是, 这些组件也经常承担它们的核心功能之外的额外责任。系统服务(例如日志、 事务管理和安全性)经常发现自己跑到了别的组件的领域里,而这些组件的核 心职责是其他事情。结果就是所谓的“代码纠缠”,或者更简单点儿说团糟”。 面向方面编程是一种试图解决这个问题的编程技术,它把关注点的隔离提升为 核心的编程概念 使用AOP时,仍然是在一个地方定义系统的公共功能,但是可以声明性地 定义如何和在哪里应用这个功能。如果对横切关注点(例如日志和事务管理) 进行了模块化,那么不用修改每个单独的类,就可以向代码中添加新特性。这类 模块化的关注点称作方面。 可以在任何Java?企业版(J2EE)服务器中使用 Spring框架的功能。而且
哪一个组件需要哪一项服务。容器 (在 Spring 框架中是 IOC 容器) 负责将 这些联系在一起。 在典型的 IOC 场景中,容器创建了所有对象,并设置必要的属性将它们连 接在一起,决定什么时间调用方法。下表列出了 IOC 的一个实现模式。 类 型 1 服务需要实现专门的接口,通过接口,由对象提供这些 服务,可以从对象查询依赖性(例如,需要的附加服务) 类型 2 通过 JavaBean 的属性(例如 setter 方法)分配依赖性 类型 3 依赖性以构造函数的形式提供,不以 JavaBean 属性的 形式公开 Spring 框架的 IOC 容器采用类型 2 和类型 3 实现。 2.1 面向方面的编程 面向方面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注 点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。 AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序 开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放 在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将 日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优 势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以, 用 Spring AOP 编写的应用程序代码是松散耦合的。 AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下 文中。 软件系统通常由多个组件构成,每个组件负责一个特定的功能领域。但是, 这些组件也经常承担它们的核心功能之外的额外责任。系统服务(例如日志、 事务管理和安全性)经常发现自己跑到了别的组件的领域里,而这些组件的核 心职责是其他事情。结果就是所谓的“代码纠缠”,或者更简单点儿说“一团糟”。 面向方面编程是一种试图解决这个问题的编程技术,它把关注点的隔离提升为 核心的编程概念。 使用 AOP 时,仍然是在一个地方定义系统的公共功能,但是可以声明性地 定义 如何 和 在哪里 应用这个功能。如果对横切关注点(例如日志和事务管理) 进行了模块化,那么不用修改每个单独的类,就可以向代码中添加新特性。这类 模块化的关注点称作 方面。 可以在任何 Java? 企业版(J2EE) 服务器中使用 Spring 框架的功能。而且
还可以调整它的大多数功能,使其适合不受控环境。 Spring的中心焦点就是支 持不被束缚在特定J2EEE服务上的可重用业务和数据访问对象。可以跨J2EE 环境(web或企业 Javabean(EJB))、独立应用程序、测试环境等等重用这类 对象,而不会有任何麻烦 个企业应用程序为例。这类应用程序通常要求类似于安全性和事务支持 的服务。显然,可以把这些服务的支持直接编写到要求服务的每个类当中,但是 更希望能够不必为大量事务性上下文编写同样的事务处理代码。如果使用 Spring AOP进行事务处理,那么可以声明性地安排适当的方法调用,而不必逐 个安排。 Spring AOP提供了几个方面,可以为 Javabean声明事务。例如, Transaction Proxy Factory Bean是个方便的代理类,能够拦截对现有类的方法调 用,并把事务上下文应用到事务bean。在下面的示例中会看到这个类的实际应 用 22IOC容器 Spring设计的核心是 org.springframework beans包,它的设计目标是与 Javabean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其 用作其他多数功能的底层中介。下一个最高级抽象是 Bean Factory接口,它是 工厂设计模式的实现,允许通过名称创建和检索对象。 Bean Factory也可以管理 对象之间的关系 Bean Factory支持两个对象模型 口单态模型提供了具有特定名称的对象的共享实例,可以在查询时对其进 行检索。 Singleton是默认的也是最常用的对象模型。对于无状态服务对象很理 口原型模型确保每次检索都会创建单独的对象。在每个用户都需要自己的 对象时,原型模型最适合 bean工厂的概念是 Spring作为IoC容器的基础。IOC将处理事情的责 任从应用程序代码转移到框架。正如我将在下一个示例中演示的那样, Spring框 架使用 Javabean属性和配置数据来指出必须设置的依赖关系。 Bean Factory接口 因为 org.springframework beans. factory. Bean Factory是一个简单接口,所以 可以针对各种底层存储方法实现。最常用的 Bean Factory定义是 XmlBean Factory,它根据XML文件中的定义装入bean,如清单1所示 清单1. XmlBean Factory Bean Factory factor new XMLBean Factory (new FilelnputSteam("mybean. xml"));
还可以调整它的大多数功能,使其适合不受控环境。Spring 的中心焦点就是支 持不被束缚在特定 J2EEE 服务上的可重用业务和数据访问对象。可以跨 J2EE 环境(Web 或企业 JavaBean(EJB))、独立应用程序、测试环境等等重用这类 对象,而不会有任何麻烦。 以一个企业应用程序为例。这类应用程序通常要求类似于安全性和事务支持 的服务。显然,可以把这些服务的支持直接编写到要求服务的每个类当中,但是 更希望能够不必为大量事务性上下文编写同样的事务处理代码。如果使用 Spring AOP 进行事务处理,那么可以声明性地安排适当的方法调用,而不必逐 个安排。 Spring AOP 提供了几个方面,可以为 JavaBean 声明事务。例如, TransactionProxyFactoryBean 是个方便的代理类,能够拦截对现有类的方法调 用,并把事务上下文应用到事务 bean。在下面的示例中会看到这个类的实际应 用。 2.2 IOC 容器 Spring 设计的核心是 org.springframework.beans 包,它的设计目标是与 JavaBean 组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其 用作其他多数功能的底层中介。下一个最高级抽象是 BeanFactory 接口,它是 工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理 对象之间的关系。 BeanFactory 支持两个对象模型。 □ 单态 模型提供了具有特定名称的对象的共享实例,可以在查询时对其进 行检索。Singleton 是默认的也是最常用的对象模型。对于无状态服务对象很理 想。 □ 原型 模型确保每次检索都会创建单独的对象。在每个用户都需要自己的 对象时,原型模型最适合。 bean 工厂的概念是 Spring 作为 IOC 容器的基础。IOC 将处理事情的责 任从应用程序代码转移到框架。正如我将在下一个示例中演示的那样,Spring 框 架使用 JavaBean 属性和配置数据来指出必须设置的依赖关系。 BeanFactory 接口 因为 org.springframework.beans.factory.BeanFactory 是一个简单接口,所以 可以针对各种底层存储方法实现。最常用的 BeanFactory 定义是 XmlBeanFactory,它根据 XML 文件中的定义装入 bean,如清单 1 所示。 清单 1. XmlBeanFactory BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));