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"));
在ⅹML文件中定义的Bean是被消极加载的,这意味在需要bean之前, bean本身不会被初始化。要从 Bean Factory检索bean,只需调用 getBean()方 法,传入将要检索的bean的名称即可,如清单2所示 清单2. get Bean( My Bean mybean=(My Bean) factory. get Bean("mybean"); 每个bean的定义都可以是POJO(用类名和 Javabean初始化属性定义) 或 Factory Bean Factory Bean接口为使用 Spring框架构建的应用程序添加 个间接的级别 IOC示例 理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的 Spring系列的第1部分进行总结时,我使用了一个示例,演示了如何通过 Spring loc容器注入应用程序的依赖关系(而不是将它们构建进来) 我用开启在线信用帐户的用例作为起点。对于该实现,开启信用帐户要求用 户与以下服务进行交互: ☆信用级别评定服务,查询用户的信用历史信息。 ☆远程信息链接服务,插入客户信息,将客户信息与信用卡和银行信息连 接起来,以进行自动借记(如果需要的话)。 ☆电子邮件服务,向用户发送有关信用卡状态的电子邮件。 三个接口 对于这个示例,我假设服务已经存在,理想的情况是用松散耦合的方式把它 们集成在一起。以下清单显示了三个服务的应用程序接口 清单3. CreditRatingInterface public interface Credit RatingInterface i public boolean getUser CreditHistoryInformation(CUstomer cUstomer) 清单3所示的信用级别评定接口提供了信用历史信息。它需要一个包含客 户信息的 Customer对象。该接口的实现是由 CreditRating类提供的。 清单4. CreditLinkinglnterface
在 XML 文件中定义的 Bean 是被消极加载的,这意味在需要 bean 之前, bean 本身不会被初始化。要从 BeanFactory 检索 bean,只需调用 getBean() 方 法,传入将要检索的 bean 的名称即可,如清单 2 所示。 清单 2. getBean() MyBean mybean = (MyBean) factory.getBean("mybean"); 每个 bean 的定义都可以是 POJO (用类名和 JavaBean 初始化属性定义) 或 FactoryBean。FactoryBean 接口为使用 Spring 框架构建的应用程序添加了一 个间接的级别。 IOC 示例 理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,演示了如何通过 Spring IOC 容器注入应用程序的依赖关系(而不是将它们构建进来)。 我用开启在线信用帐户的用例作为起点。对于该实现,开启信用帐户要求用 户与以下服务进行交互: ☆ 信用级别评定服务,查询用户的信用历史信息。 ☆ 远程信息链接服务,插入客户信息,将客户信息与信用卡和银行信息连 接起来,以进行自动借记(如果需要的话)。 ☆ 电子邮件服务,向用户发送有关信用卡状态的电子邮件。 三个接口 对于这个示例,我假设服务已经存在,理想的情况是用松散耦合的方式把它 们集成在一起。以下清单显示了三个服务的应用程序接口。 清单 3. CreditRatingInterface public interface CreditRatingInterface { public boolean getUserCreditHistoryInformation(ICustomer iCustomer); } 清单 3 所示的信用级别评定接口提供了信用历史信息。它需要一个包含客 户信息的 Customer 对象。该接口的实现是由 CreditRating 类提供的。 清单 4. CreditLinkingInterface
public interface CreditLinkingInterface ublic String getUrlO public void setUrl(String url) public void link Credit BankAccountO throws Exception 信用链接接口将信用历史信息与银行信息(如果需要的话)连接在一起,并 插入用户的信用卡信息。信用链接接口是一个远程服务,它的查询是通过 getLo 方法进行的。URL由 Spring框架的bean配置机制设置,我稍后会讨论它。该 接口的实现是由 CreditLinking类提供的 清单5 EmailInterface public interface EmailInterface i public void send Email(CUstomer cUstomer) public String getFrom Email: public void setFrom Email(String from Email) public String getPasswordo; public void setPassword(String password) public String getSmtpHostO public void setSmtpHost( String smtp Host); public String getUserldo public void set Userid( String userid) 三、 Spring和数据库框架的整合 Spring框架提供了对 Hibernate、JDO和 IBATIS SQL Maps的集成支持。 Spring 对 Hibernate的支持是第一级的,整合了许多IOC的方便特性,解决了许多典 型的 Hibernate集成问题。框架对 Hibernate的支持符合 Spring通用的事务和 数据访问对象(DAO)异常层次结构 Spring为使用选择的OR映射层来创建数据访问应用程序提供了支持。因 为所有东西都设计成一组可重用 Javabean,所以不管选择什么技术,都能以库 的格式访问大多数 Spring的OR映射支持。 Application Context或 Bean Factory内部的OR映射的好处是简化了配置和部署 31 spring与 hibernate整合
public interface CreditLinkingInterface { public String getUrl(); public void setUrl(String url); public void linkCreditBankAccount() throws Exception ; } 信用链接接口将信用历史信息与银行信息(如果需要的话)连接在一起,并 插入用户的信用卡信息。信用链接接口是一个远程服务,它的查询是通过 getUrl() 方法进行的。URL 由 Spring 框架的 bean 配置机制设置,我稍后会讨论它。该 接口的实现是由 CreditLinking 类提供的。 清单 5. EmailInterface public interface EmailInterface { public void sendEmail(ICustomer iCustomer); public String getFromEmail(); public void setFromEmail(String fromEmail) ; public String getPassword(); public void setPassword(String password) ; public String getSmtpHost() ; public void setSmtpHost(String smtpHost); public String getUserId() ; public void setUserId(String userId); } 三、 Spring 和数据库框架的整合 Spring 框架提供了对 Hibernate、JDO 和 iBATIS SQL Maps 的集成支持。Spring 对 Hibernate 的支持是第一级的,整合了许多 IOC 的方便特性,解决了许多典 型的 Hibernate 集成问题。框架对 Hibernate 的支持符合 Spring 通用的事务和 数据访问对象(DAO)异常层次结构。 Spring 为使用选择的 OR 映射层来创建数据访问应用程序提供了支持。因 为所有东西都设计成一组可重用 JavaBean,所以不管选择什么技术,都能以库 的格式访问大多数 Spring 的 OR 映射支持。 ApplicationContext 或 BeanFactory 内部的 OR 映射的好处是简化了配置和部署。 3.1 spring 与 hibernate 整合
Hibernate是Java平台上一个功能全面的、开源的OR映射框架。 Hibernate 支持开发符合常规Java理念的持久性类 包括关联、继承、多态、复合以 及Java集合框架。 Hibernate查询语言(HQL)被设计成SQL的一个微型面 向对象扩展,它是对象和关系世界之间的桥梁。 Hibernate也支持用原始SQL或 基于Java的标准和示例査询表达查询。 Hibernate使用XML(* hbm. xml)文 件把Java类映射到表,把 Javabean属性映射到数据库表。 通过JDBC技术,支持所有的SQL数据库管理系。 Hibernate与所有流行 的』2EE应用程序服务器和web容器都很好地集成。 实际示例 个银行应用程序示例可以让您自己看到 Spring AOP和 Hibernate一起 工作有多么好。银行帐户用例允许用户( Customer)在一个事务中打开一个或 多个银行帐户。用户可以申请多个银行帐户,可以选择是支票帐户类型或者是储 蓄帐户类型 应用程序数据库( Cloudscape?)容纳所有客户和帐户信息。在这个例子中, 假设在 Customer和 Account类之间存在N的关联。在实际生活场景中,关 联可能需要按mn建模,才能支持联合帐户。 由于用户必须可以在一个事务中申请多个帐户,所以首先要为数据库交互实 现一个DOA模式。然后要设置 Spring AOP的 Transaction Proxy Factory Bean, 让它拦截方法调用并声明性地把事务上下文应用到DOA 四、 Struts和 Spring的区别 作者:0461108刘芳 4 STruts介绍 从视图角度(View) 主要由JSP建立, struts自身包含了一组可扩展的自定义标签库( TagLib), 可以简化创建用户界面的过程。目前包括: Bean Tags, HTML Tags, Logic tags, Nested Tags, Template Tags这几个 Taglib. 从模型角度( Model) 模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也 也划分到模型中)。在 Struts中,系统的状态主要有 ActiomForm Bean体现, 般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储 Struts本身也提供了 Title包,可以方便的与数据库操作 从控制器角度( Controller) 在 Struts framework中, Controller主要是 Action Servlet,但是对于业 务逻辑的操作则主要由 Action、 ActionMapping、 Action Forward这几个组件协 调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中, Actior
Hibernate 是 Java 平台上一个功能全面的、开源的 OR 映射框架。Hibernate 支持开发符合常规 Java 理念的持久性类 —— 包括关联、继承、多态、复合以 及 Java 集合框架。Hibernate 查询语言(HQL)被设计成 SQL 的一个微型面 向对象扩展,它是对象和关系世界之间的桥梁。Hibernate 也支持用原始 SQL 或 基于 Java 的标准和示例查询表达查询。Hibernate 使用 XML(*.hbm.xml) 文 件把 Java 类映射到表,把 JavaBean 属性映射到数据库表。 通过 JDBC 技术,支持所有的 SQL 数据库管理系。Hibernate 与所有流行 的 J2EE 应用程序服务器和 Web 容器都很好地集成。 实际示例 一个银行应用程序示例可以让您自己看到 Spring AOP 和 Hibernate 一起 工作有多么好。银行帐户用例允许用户 (Customer) 在一个事务中打开一个或 多个银行帐户。用户可以申请多个银行帐户,可以选择是支票帐户类型或者是储 蓄帐户类型。 应用程序数据库(Cloudscape?)容纳所有客户和帐户信息。在这个例子中, 假设在 Customer 和 Account 类之间存在 1:N 的关联。在实际生活场景中,关 联可能需要按 m:n 建模,才能支持联合帐户。 由于用户必须可以在一个事务中申请多个帐户,所以首先要为数据库交互实 现一个 DOA 模式。然后要设置 Spring AOP 的 TransactionProxyFactoryBean, 让它拦截方法调用并声明性地把事务上下文应用到 DOA。 四、 Struts 和 Spring 的区别 作者:0461108 刘芳 4.1Struts 介绍: 从视图角度(View) 主要由 JSP 建立,struts 自身包含了一组可扩展的自定义标签库(TagLib), 可以简化创建用户界面的过程。目前包括:Bean Tags,HTML Tags,Logic Tags, Nested Tags,Template Tags 这几个 Taglib。 从模型角度(Model) 模型主要是表示一个系统的状态(有时候,改变系统状态的业务逻辑操作也 也划分到模型中)。在 Struts 中,系统的状态主要有 ActiomForm Bean 体现,一 般情况下,这些状态是非持久性的。如果需要将这些状态转化为持久性数据存储, Struts 本身也提供了 Utitle 包,可以方便的与数据库操作 从控制器角度(Controller) 在 Struts framework 中, Controller 主要是 ActionServlet,但是对于业 务逻辑的操作则主要由 Action、ActionMapping、ActionForward 这几个组件协 调完成(也许这几个组件,应该划分到模型中的业务逻辑一块)。其中,Action
扮演了真正的业务逻辑的实现者,而 ActionMapping和 Action Forward则指定了 不同业务逻辑或流程的运行方向。 42 Spring介绍 轻量,从大小与开销两方面而言 Spring都是轻量的。完整的 Spring框架可以在 大小只有1MB多的JAR文件里发布。并且 Spring所需的处理开销也是微不足道 的。此外, Spring是非侵入式的:典型地, Spring应用中的对象不依赖于 Spring 的特定类。 2、控制反转, Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应 用了IoC,对象被动地传递它们的依赖而不是自己创建或者査找依赖对象。你可 以认为IoC与JNDI相反,不是对象从容器中査找依赖,而是容器在对象初始化时 不等被请求就将依赖传递给它。 3、面向切面. Spring包含对面向切面编程的丰富支持,允许通过分离应用的业 务逻辑与系统服务(例如审计与事物管理)进行内聚性的开发。应用对象只做它 们应该做的”完成业务逻辑”仅此而已。它们并不负责(甚至是意识)其它的系 统关注点,例如日志或事物支持。 4、容器. Spring包含和管理应用对象的配置和生命周期,在这个意义上它是 种容器。你可以配置你的每个bean如何被创建??基于一个配置原形为你的bean 创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互 关联的。然而, Spring不应该被混同于传统的重量的EJB容器,它们经常是庞 大与笨重的,难以使用 4.3 Struts VS Spring struts缺点是比较重,页面(V)上要有form要用标签,form(M)要继承 Action Form 这么个东西,控制类(C)继承 Action/ DispatchAction Spring,页面标签用 jst1, model也不用继承什么,控制类继承 MultiAction Controller/SimpleFormController 在页面输入数据绑定上, struts用的是 ActionForm的自动绑定, Spring的是在 controller中声明 command对象。 在实现输入验证上 struts在form(M)上做文章要继承 ValidateForr, Sprit 都在 action上做文章。 Spring比较特殊,它是编程式的验证;而 struts都是 配置式的验证 各自优缺点:1、 Struts优点:业界“标准”(很多成功案例),学习资源丰 富,HIML标签非常优秀缺点: ActionForms使用不便、无法进行单元测试 ( StrutsTestcase只能用于集成)2、 Spring mvc优点: Lifecyle for overriding binding, validation,etc.;易于同其它View框架( Titles等) 无缝集成,采用I0C便于测试缺点:使用人数少、jsp中要写很多代码、控制器 过于灵活,缺少一个公用控制器
扮演了真正的业务逻辑的实现者,而 ActionMapping 和 ActionForward 则指定了 不同业务逻辑或流程的运行方向。 4.2 Spring 介绍: 轻量,从大小与开销两方面而言 Spring 都是轻量的。完整的 Spring 框架可以在 一 大小只有 1MB 多的 JAR 文件里发布。并且 Spring 所需的处理开销也是微不足道 的。此外,Spring 是非侵入式的:典型地,Spring 应用中的对象不依赖于 Spring 的特定类。 2、控制反转,Spring 通过一种称作控制反转(IoC)的技术促进了松耦合。当应 用了 IoC,对象被动地传递它们的依赖而不是自己创建或者查找依赖对象。你可 以认为 IoC 与 JNDI 相反,不是对象从容器中查找依赖,而是容器在对象初始化时 不等被请求就将依赖传递给它。 3、面向切面.Spring 包含对面向切面编程的丰富支持,允许通过分离应用的业 务逻辑与系统服务(例如审计与事物管理)进行内聚性的开发。应用对象只做它 们应该做的”完成业务逻辑”仅此而已。它们并不负责(甚至是意识)其它的系 统关注点,例如日志或事物支持。 4、容器.Spring 包含和管理应用对象的配置和生命周期,在这个意义上它是一 种容器。你可以配置你的每个 bean 如何被创建??基于一个配置原形为你的 bean 创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互 关联的。然而,Spring 不应该被混同于传统的重量的 EJB 容器,它们经常是庞 大与笨重的,难以使用。 4.3 Struts VS Spring: struts缺点是比较重,页面(V)上要有 form要用标签,form(M)要继承 ActionForm 这么个东西,控制类(C)继承 Action/DispatchAction。Spring,页面标签用 jstl , model 也不用继承什么,控制类继承 MultiActionController/SimpleFormController。 在页面输入数据绑定上,struts 用的是 ActionForm 的自动绑定,Spring 的是在 controller 中声明 command 对象。 在实现输入验证上 struts 在 form(M)上做文章要继承 ValidateForm, Spring 都在 action 上做文章。Spring 比较特殊,它是编程式的验证;而 struts 都是 配置式的验证 各自优缺点: 1、 Struts 优点:业界“标准”(很多成功案例),学习资源丰 富,HTML 标签非常优秀缺点:ActionForms 使用不便、无法进行单元测试 ( StrutsTestCase 只能用于集成) 2、 Spring MVC 优点:Lifecyle for overriding binding, validation, etc.;易于同其它 View 框架(Titles 等) 无缝集成,采用 IOC 便于测试缺点:使用人数少、jsp 中要写很多代码、控制器 过于灵活,缺少一个公用控制器
4.4 Struts&spring 整合 与 Struts相似, Spring可以作为一个MvC实现。这两种框架都具有自己的优 点和缺点,尽管大部分人同意 Struts在MvC方面仍然是最好的。很多开发团 队已经学会在时间紧迫的时候利用 Struts作为构造高品质软件的基础 Struts具有如此大的推动力,以至于开发团队宁愿整合 Spring框架的特性, 而不愿意转换成 Spring mvc。没必要进行转换对您来说是一个好消息。 Spring架构允许您将 Struts作为Web框架连接到基于 Spring的业务和持 久层。最后的结果就是现在一切条件都具备了, 窍门1.使用 Spring的 Action Support 手动创建一个 Spring环境是一种整合 Struts和 Spring的最直观的方式。为了使 它变得更简单, Spring提供了一些帮助。为了方便地获得 Spring环境, org. springframework.web. struts. ActionSupport类提供了一个 getWebApplication Contexto方法。您所做的只是从 Spring的 Action Support而不是 Struts action类扩展您的动作,如清单1所示 清单1.使用 Action Support整合 Struts package ca. nExcel books actions import java. io IOException import javax. servlet Servletexception importjavax.servlethttpHttpservletrequEst importjavax.servlethttpHttpservletrespOnse import org. apache. struts action. actionError import org. apache. struts action. ActionErrors import org. apache struts action. action Form import org. apache. struts action. ActionForward import org. apache struts action Action Mapping import org. apache struts action. DynaActionForm import org. springframework context. ApplicationContext
4.4 Struts&Spring 整合: 与 Struts 相似,Spring 可以作为一个 MVC 实现。这两种框架都具有自己的优 点和缺点,尽管大部分人同意 Struts 在 MVC 方面仍然是最好的。很多开发团 队已经学会在时间紧迫的时候利用 Struts 作为构造高品质软件的基础。 Struts 具有如此大的推动力,以至于开发团队宁愿整合 Spring 框架的特性, 而不愿意转换成 Spring MVC。没必要进行转换对您来说是一个好消息。 Spring 架构允许您将 Struts 作为 Web 框架连接到基于 Spring 的业务和持 久层。最后的结果就是现在一切条件都具备了。 窍门 1. 使用 Spring 的 ActionSupport 手动创建一个 Spring 环境是一种整合 Struts 和 Spring 的最直观的方式。为了使 它变得更简单,Spring 提供了一些帮助。为了方便地获得 Spring 环境, org.springframework.web.struts.ActionSupport 类提供了一个 getWebApplicationContext() 方法。您所做的只是从 Spring 的 ActionSupport 而不是 Struts Action 类扩展您的动作,如清单 1 所示: 清单 1. 使用 ActionSupport 整合 Struts package ca.nExcel.books.actions; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.ActionError; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import org.springframework.context.ApplicationContext;