设计模式 Design Patterns

Similar documents
Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

第03章 控制反转(Spring IoC)

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

untitled

输入 project name 选择完成

IoC容器和Dependency Injection模式.doc

untitled

untitled

nb.PDF


序号:001

1.2. Sql 映射配置 小风 Java 实战系列教程 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" "

EJB-Programming-3.PDF

基于ECO的UML模型驱动的数据库应用开发1.doc

计算机软件技术专业教学计划

<313031A4C9BEC7C160BA5DB3E A457BAF4A4BDA769AAA9292E584C53>

nbqw.PDF

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

28 资 源 与 产 业 2015 年 题 1) 建 立 项 目 信 息 化 管 理 的 完 整 流 程, 在 项 目 信 息 化 管 理 过 程 中, 始 终 需 要 按 照 项 目 子 项 目 课 题 之 间 的 隶 属 关 系 实 现 三 级 管 理, 便 于 项 目 管 理 者 准 确 掌

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

优迈科技教学大纲2009版本

「西醫基層總額支付委員會《第28次委員會議紀錄

RunPC2_.doc

Microsoft Word - 01.DOC

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

大连软~1

北京北信源软件股份有限公司招股书(申报稿)

電機工程系認可證照清單 /7/1

Microsoft Word - MIS.doc

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

1.5招募说明书(草案)

JavaIO.PDF

untitled

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

Java

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

团 学 要 闻 我 校 召 开 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 3 月 17 日, 我 校 共 青 团 五 届 九 次 全 委 ( 扩 大 ) 会 议 在 行 政 办 公 楼 五 楼 会 议 室 举 行, 校 团 委 委 员 各 院 ( 系 ) 团 委 书 记 校 学 生

设计模式 Design Patterns

设计模式 Design Patterns

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

untitled

职 位 类 别 : 测 试 工 程 师 工 作 经 验 或 实 习 经 历 : 不 限 岗 位 要 求 : 1. 本 科 及 其 以 上 学 历, 计 算 机 相 关 专 业 2014 届 毕 业 生 ; 2. 实 习 时 间 要 求, 尽 量 一 周 五 个 工 作 日 ; 3. 熟 悉 Wind

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

<!-- import outer proper

untitled

Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 Spring 的核心容器 Spring 的入门程序 依赖注入的概念 依赖注入的实现方式 依赖注入的概念 了解 Spring 的概念和优点 理解 Spring 中的 IoC 和 DI 思想 掌握 ApplicationContext 容器的

Microsoft Word 级第二专业学士学位培养计划.doc

序 言 本 专 业 人 才 培 养 方 案 以 适 应 市 场 需 求 为 目 标, 根 据 学 校 校 企 双 主 体 人 才 培 养 的 要 求 和 移 动 应 用 开 发 专 业 的 特 点 设 置 课 程 体 系, 体 现 了 课 程 为 市 场 服 务 的 特 点 本 专 业 要 求 学

近四年网络工程专业培养方案.doc

4.1 AMI MQSeries API AMI MQI AMI / / AMI JavaC C++ AMI / AMI AMI - / /

Microsoft Word - 王彬_已修改_.doc

拦截器(Interceptor)的学习

jsp

<4D F736F F D20B9FABCD2BBFAB9D8B0ECB9ABBDA8D6FEBACDB4F3D0CDB9ABB9B2BDA8D6FEC4DCBAC4BCE0B2E2CFB5CDB3C8EDBCFEBFAAB7A2D6B8B5BCCBB5C3F7CAE92E646F63>

Chapter 9: Objects and Classes

信息

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Page 2 of 16 </context-param> <!-- 著名 Character Encoding filter --> <filter> <filter-name>encodingfilter</filter-name> <filter-class>org.springframewo

PowerPoint Presentation

Microsoft PowerPoint - plan08.ppt

声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工

epub83-1

chp6.ppt

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

f2.eps

untitled

1

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

计算机网络与经济(六).doc

untitled

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

发现一:全国医院信息化发展不平衡

第一篇 Hibernate实用技术

untitled

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

Adobe® Flash® 的 Adobe® ActionScript® 3.0 程式設計

『謝老闆』僱主補償契約責任保?..峟n保書(FUN441) pdf

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

mvc

“百企入校——广西青年企业家协会高校

RUN_PC連載_8_.doc

LiveBOS产品白皮书

untitled

LiveBOS产品白皮书

附件2

Slide 1

untitled

BPS6.0 Web服务集成和短流程功能使用手册

软 件 工 程 专 业 习 指 南 目 录 一 软 件 工 程 专 业 设 置 背 景 与 发 展 前 景... 3 二 软 件 工 程 专 业 实 践 教 条 件... 4 三 软 件 工 程 专 业 课 程 类 型 及 核 方 式 软 件 工 程 专 业 课 程 类 型...7

建模与图形思考

ICD ICD ICD ICD ICD

RUN_PC連載_10_.doc

untitled

苏州科技学院

基于CDIO一体化理念的课程教学大纲设计

Transcription:

Spring 与 Struts Hibernate 的集成 丁勇 Email:18442056@QQ.com

学习目标 掌握 Spring 与 Struts 的集成 掌握 Spring 与 Hibernate 的集成 学会使用 Spring 实现声明式事务

Spring 与 Hibernate 集成 使用 Spring 简化 Hibernate 编程 使现有使现有 Java Java EE EE 技术更易用 Spring 的目标的目标 使用使用 Hibernate 的繁琐步骤 import org.springframework.orm.hibernate3.support.hibernated aosupport; public class FwxxDAOHibImpl extends HibernateDaoSupport implements FwxxDAO{ public void add(fwxx fwxx) { 使用使用 Spring 对 Hibernate 支持支持 super.gethibernatetemplate().add(fwxx); }

Spring 与 Hibernate 集成 public class FwxxDAOHibImpl extends HibernateDaoSupport implements FwxxDAO { 使用 Spring 简化 Hibernate 编程...... public FWXX get(int fwid) { return (FWXX) super.gethibernatetemplate().get(fwxx.class, fwid); } public List search(final FWXX condition){ return super.gethibernatetemplate().executefind( 在这里构造查询条件 new HibernateCallback() { public Object doinhibernate(session s) throws HibernateException { Criteria c = s.createcriteria(fwxx.class); if (null!=condition) { // 构造 Criteria 查询条件的代码...... } c.addorder(order.asc("custcode")); return c.list(); } }); }

Spring 与 Hibernate 集成 Session 在哪里创建? FwxxDAOHibImpl 中 HibernateDaoSupport 提供了提供了如何创建 session 的? setsessionfactory 方法方法 Spring 提供了提供了 LocalSessionFactoryBean 用于创建 SessionFactory, 但需要通过数据源数据源 setdatasource 设置数据源 (DataSource) 配置数据源和 SessionFactory 使用 Spring 依赖注入, 只需配置, 无需编码

Spring 与 Hibernate 集成 依赖注入顺序 datasource sessionfactory fwxxdao fwxxbiz fwxxaction <bean id="datasource" 配置数据源 class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname" value="com.microsoft.jdbc.sqlserver.sqlserverdriver" /> <property name="url" value="jdbc:microsoft:sqlserver://localhost;databasename=epet;selectmetho 数据库连接信息 d=cursor" /> <property name="username" value="sa" /> <property name="password" value="pwd" />

Spring 与 Hibernate 集成 配置 SessionFactory <bean id="sessionfactory" class="org.springframework.orm.hibernate3.localsessionfactor 注入 ybean"> datasource <property name="datasource" ref="datasource" /> <property name="mappingresources"> <list> <value>com/aptech/jb/entity/user.hbm.xml</value> Hibernate <value>com/aptech/jb/entity/fwxx.hbm.xml</value> 映射文件列... 表 </list> </property> Hibernate 属 <property name="hibernateproperties"> 性 <props> <prop key="hibernate.dialect"> org.hibernate.dialect.sqlserverdialect 演示示例 </prop> :Spring 与 Hibernate 集成集成 <prop key="hibernate.show_sql">true</prop> </props>

小结 继承自 HibernateDaoSupport 实现 UserDAO 接口 package com.aptech.jb.dao; public interface UserDAO{ public User get(int id); public void add(user item); public void del(int id); public void update(user item); public List search(final User condition); }

datasource 使用 Spring 重新组装 Web 程序 使用 Spring 管理依赖 Web 应用中组件间的依赖关系 sessionfactory fwxxdao fwxxbiz fwxxaction 组装 sessionfactory 注入到 DAO 中 <bean id="fwxxdao" class="com.aptech.jb.dao.hibimpl.fwxxdaohibim pl"> <property name="sessionfactory" ref ="sessionfactory" /> DAO 注入到 Biz/Service 中 : 首先增加 setter 方法, 去掉代码中对接口实现的依赖 <bean id="fwxxbiz" class="com.aptech.jb.biz.impl.fwxxbizi mpl"> <property name="fwxxdao" ref ="fwxxdao" />

使用 Spring 重新组装 Web 程序 与 Struts 集成 回顾 :Struts 机制 请求 ActionServlet Action Action Bean 是由 Struts 创建的 我们用 Spring 创建 Action, 告诉 Struts 到 Spring 的 Bean 工厂中去取

使用 Spring 重新组装 Web 程序 与 Struts 集成 步骤 1. 在 struts config.xml 配置插件 <?xml version="1.0" encoding="gbk"?> <struts-config>...... <message-resources parameter="com.aptech.jb.applicationresources" /> <plug-in classname="org.springframework.web.struts.contextloade rplugin"> <set-property property="contextconfiglocation" Spring 配置文件路径 value="classpath:applicationcontext.xml" /> </plug-in> </struts-config>

使用 Spring 重新组装 Web 程序 与 Struts 集成 步骤 2. 修改 Action Bean 配置 <?xml version="1.0" encoding="gbk"?> <struts-config> <action name="fwxxform" path="/fwxx" parameter="operate" scope="request" type="org.springframework.web.struts.delegatingac 修改 type 属 tionproxy"> 性 <forward name="list" path="/list.jsp" /> <forward name="detail" path="/detail.jsp" /> <forward name="modify" path="/modify.jsp" /> <forward name="error" path="/error.jsp" /> </action> </struts-config>

使用 Spring 重新组装 Web 程序 与 Struts 集成 步骤 3. 在 Spring 配置文件中配置 Action Bean, 将 Biz 注入 name 属性与 Struts 配置中 path 属性 相同 <bean name="/fwxx" class="com.aptech.jb.web.action.fwxxac <property name="fwxxbiz" ref="fwxxbiz" /> 演示示例 :Spring 与 Struts 集成集成

小结 写出 fwxx 相关的从 datasource 到 fwxxaction 的所有接口和类, 并在 Spring 配置文件中 datasource 配置 sessionfactory fwxxdao fwxxbiz 在此基础上, 增加 user 相关类的配置 fwxxaction 提示 : datasource 和 sessionfacotory 的配置可以重用

声明式事务 事务管理 在业务逻辑层控制事务 一个业务过程通常需要多次数据库操作 事务控制是企业应用系统开发中重要问题 传统方式 散布在系统中的事务处理代码 务处理代码 采取 AOP 的方式实现声明式事务 传来传去的 Connection / Session 对象 AOP 方式独立于系统代码之外采取声明 配置的方式给系统提供事务支持

1.x 的方式 声明式事务 回顾 :Spring 中 AOP 的配置方式 配置思路 : 事务管理器 myhibtransactionmana ger 被代理的 Bean fwxxbiztarget 代理 Bean 注入 fwxxbiz 原 Bean 通知 (Advice) 代理 <bean id="myhibtransactionmanager" 事务管理器 class="org.springframework.orm.hibernate3.hibernatetransaction <property 配置代码 name="sessionfactory" : ref="sessionfactory"/> <bean id="fwxxbiztarget" 被代理的 Bean class="com.aptech.jb.biz.impl.fwxxbizimpl"> <property name="fwxxdao" ref ="fwxxdao" />

配置代码 : 声明式事务 代理类 <bean id="fwxxbiz" class="org.springframework.transaction.interceptor.transaction ProxyFactoryBean"> <property name="transactionmanager" ref="myhibtransactionmanager"/> <property name="target" ref="fwxxbiztarget" /> <property name="transactionattributes"> <props> <prop key="add*">propagation_required </prop> 声明事务属性 <prop key="del*">propagation_required </prop> <prop key="update*">propagation_required </prop> <prop key="do*">propagation_required </prop> <prop key="*">propagation_required,readonly</prop> 演示示例 : 使用使用 Spring 1.x 1.x 配置声明式事务含义 : 对 add del update do 打头的 </props> 方法要求在事务环境中运行, 对其他方法在 </property> 只读事务中运行 被代理的 Bean

1.x 的方式 存在问题 系统中存在多个业务逻辑对象时 声明式事务 反反复复地定义 target 和代理和代理 bean bean 反反复复地声明事务 解决办法 : 定义 basetransproxy <bean id="basetransproxy" abstract="true" class="..."> <property name="transactionmanager" 没有注入 ref="myhibtransactionmanager"/> target <property name="transactionattributes"> <props>...... </props> </property> 定义为 抽象的

声明式事务 继承自 basetransproxy <!-- Target --> <bean id="fwxxbiztarget" class="com.aptech.jb.biz.impl.fwxxbizimpl"> <property name="fwxxdao" ref="fwxxdao" /> <bean id="userbiztarget" class="com.aptech.jb.biz.impl.userbizimpl"> <property name="userdao" ref="userdao" /> <!-- Biz --> bean <bean id="fwxxbiz" parent="basetransproxy"> <property name="target" ref=" fwxxbiztarget" /> <bean id="userbiz" parent="basetransproxy"> <property name="target" ref=" userbiztarget" /> 定义 target 定义代理

2.0 的方式 添加 Spring 2.0 到项目 1 添加 Spring 2.0 的 jar 包 声明式事务 <?xml 2 添加 version="1.0" Spring 2.0 encoding="utf-8"?> 配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xmlns:aop="http://www.springframework.org/schema/ aop" xmlns:tx="http://www.springframework.org/schema/tx " xsi:schemalocation="http://www.springframework.org/ schema/beans http://www.springframework.org/schema/beans/springbeans-2.0.xsd http://www.springframework.org/schema/tx

声明式事务 2.0 的方式 优势 : 更简洁易懂 非侵入式 配置思路 : 事务管理器 myhibtransactionmanag er 事务通知 txadvice 切面 bizmetho ds 通知者 (advisor)

2.0 的方式 声明式事务 配置代码 : <tx:advice id="txadvice" transaction-manager="myhibtransactionmanager"> <tx:attributes> <tx:method name="add*" propagation="required" 声明事 /> 务属性 <tx:method name="del*" propagation="required" /> <tx:method name="update*" propagation="required" /> <tx:method name="do*" propagation="required" /> <tx:method name="*" propagation="supports" 应用于 biz 层的所 read-only="true" /> 有类的所有方法 </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="bizmethods" 将事务属性和应用范围关联

总结 使用 Spring 如何简化了 Hibernate 编码? Spring 如何与 Struts 集成? 如何使用 Spring 实现声明式事务? (1.x 的方式,2.x 的方式 )