设计模式 Design Patterns

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

untitled

EJB-Programming-4-cn.doc

设计模式 Design Patterns

IoC容器和Dependency Injection模式.doc

EJB-Programming-3.PDF


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

《大话设计模式》第一章

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

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

chp6.ppt

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

untitled

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

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

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

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

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

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

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

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

Chapter 9: Objects and Classes

JavaIO.PDF

untitled

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

Microsoft Word - 01.DOC

Java 1 Java String Date

(Microsoft Word - \272\364\263q\245|\244A_ _\304\254\253\330\336\263__\272\353\302\262\263\370\247i.doc)

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

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

Microsoft Word - 新1-12.doc

使用MapReduce读取XML文件

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

Chapter 9: Objects and Classes

Guava学习之Resources

软件工程文档编制

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

设计模式 Design Patterns

拦截器(Interceptor)的学习

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有

Microsoft Word - Learn Objective-C.doc

untitled

javaexample-02.pdf

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

输入 project name 选择完成

<4D F736F F D B8BDBCFE332D3120C8EDBCFEB9A4B3CCCBB6CABFC5E0D1F8B7BDB0B8>

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政

设计模式 Design Patterns

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

大连软~1

untitled

untitled

untitled

1.5招募说明书(草案)

中国人民大学公共管理大专业考研必读信息(公共管理学院部分)

三、育明考博总结中共中央党校考博复习策略(育明教育考博课程中心)

第03章 控制反转(Spring IoC)

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

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

HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700 M725 CF214X (14X) 17.5 HP 5200 Q7516A U16-2CHIP SSS 846 芯片记号 (U16-2) Canon LBP-3500, LBP-3900, LBP-392

Stateless Session Beans(无状态bean)的学习

Microsoft Word 電腦軟體設計.doc

目 录 第 一 部 分 档 案 局 概 况 一 主 要 职 责 二 部 门 决 算 单 位 构 成 第 二 部 分 档 案 局 2016 年 度 部 门 预 算 表 一 2016 年 度 市 级 部 门 收 支 预 算 总 表 二 2016 年 度 市 级 部 门 支 出 预 算 表 三 2016

2015 年 度 收 入 支 出 决 算 总 表 单 位 名 称 : 北 京 市 朝 阳 区 卫 生 局 单 位 : 万 元 收 入 支 出 项 目 决 算 数 项 目 ( 按 功 能 分 类 ) 决 算 数 一 财 政 拨 款 一 一 般 公 共 服 务 支 出 二

<4D F736F F D A67EA4E9A5BBB1D0A87CAEC8A6E6B0D1B358B3F8A7692D2DA468AA4CB0AAB0D3>

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

在Spring中使用Kafka:Producer篇

中国地质大学(武汉)

优迈科技教学大纲2009版本

Microsoft Word - n doc

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

设计模式 Design Patterns

秘密大乘佛法(下)

國立臺東高級中學102學年度第一學期第二次期中考高一國文科試題

!! :!!??!!?!??!!!... :... :'?'?! :' ' :'?' :'?' :'!' : :? Page 2

Page 2 of 12

Microsoft Word - Sunday

鎶ョ焊0

<D2B0D0C4D3C5D1C52DC8CED6BEC7BF202D20BCC7CAC2B1BE>

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

國立嘉義高中96學年度資優班語資班成班考國文科試題

Microsoft Word 養生與保健_中山大學_講義


萬里社區老人健康照護手冊

Microsoft Word - 強制汽車責任保險承保及理賠作業處理辦法 doc

Microsoft Word - 06.Understanding of Pregnancy and Birth.doc

範本檔

附 件 一 : 办 理 集 中 式 银 期 转 账 业 务 网 点 名 单 序 号 地 区 网 点 名 称 地 址 联 系 人 电 话 23 工 商 银 行 安 徽 省 铜 陵 百 大 支 行 铜 陵 市 长 江 东 路 50 号 鲁 桂 珍 工 商 银 行 安 徽

2. 二 年 級 吳 毓 秀 老 師 : 感 謝 午 餐 公 司 平 時 均 能 準 時 送 餐, 但 希 望 能 不 要 使 用 加 工 品, 且 學 生 反 映 希 望 能 多 加 蛋 品 的 食 物 3. 三 年 級 柯 阿 青 老 師 : 雞 肉 有 血 水 味, 請 午 餐 公 司 能 調

人 物 春 秋 杨 永 泰 将 其 削 藩 策 略 概 括 为 : 以 经 济 方 法 瓦 解 冯 玉 祥 的 第 二 集 团 军, 以 政 治 方 法 解 决 阎 锡 山 的 第 3 集 团 军, 以 军 事 方 法 解 决 李 宗 仁 的 第 四 集 团 军, 以 外 交 方 法 对 付 张 学

糖尿病食譜


,,,,,,, (,, ),,,,,,,,,,,,,,, ,,, 4 11,, ( ),,,, ( ), :, ( ),,, 1995, 66 ; ( ),, 1996, , 3-4,,

2002 4,,, 1941,,,,,,,,,,,,,,,,,, : ;:, 1991,

(➂)11. 炎 炎 夏 日, 即 使 下 起 滂 沱 大 雨, 都 消 除 不 了 令 人 心 煩 的 暑 氣 這 句 話 主 要 想 表 達 什 麼? ➀ 夏 日 裡 經 常 下 著 滂 沱 大 雨, 令 人 心 煩 ➁ 下 著 滂 沱 大 雨 的 日 子, 可 以 消 除 暑 氣 ➂ 夏 日

高雄市立五福國民中學九十四學年度第一學期第三次段考二年級本國語文學習領域試題卷

台北老爺校外實地參訪結案報告

Transcription:

丁勇 Email:18442056@QQ.com

学习目标 掌握 Spring 依赖注入的原理 掌握 Spring AOP 原理

Spring 之父 Rod Johnson SpringFramework 创始人, interface21 CEO 丰富的 c/c++ 背景, 丰富的金融行业背景 1996 年开始关注 Java 服务器端技术 Servlet2.4 和 JDO2.0 专家组成员 2002 年著写 Expoert one-on-one J2EE 设计与开发, 改变了 Java 世界 技术主张 : 技术实用为本 音乐学博士

Spring 的绿草丛 Spring : 轻量级框架, Java EE 的春天, 当前主流框架 目标 : 使现有技术更加易用, 推进编码最佳实践 内容 : 依赖注入容器,AOP 实现 ( 声明式事务 ), DAO/ORM 支持,Web 集成

为什么使用依赖注入 (DI) 过于 复杂的软件系统 组件化的思想 目的 : 解耦合 实现每个组件块时只关注组件内部的事情 依赖注入 : 强制将组件的构建和使用分开 组件的使用 接口的定义 要点 : 明确定义组件间的接口 面向对象使系统的实现变得容易 运行时注入 当系统复杂到一定程度时, 仅仅面向组件的生产对象就不够了

怎样使用依赖注入 如何开发一个打印机? 打印机功能的实现依赖于墨盒和纸张 步骤 : 1 定义墨盒和纸张的接口标准 2 使用接口标准开发打印机 3 组装打印机 双色墨盒 4 运行打印机 彩色墨盒 A4 B5

1. 定义组件接口 墨盒接口 :Ink 纸张接口 :Page 怎样使用依赖注入 2. public 使用接口开发打印机 class Printer { public interface Ink { public String getcolor(int r,int g,int b); public interface Paper { public Ink ink = null; public static 我们在开发打印机 final String newline = "\r\n"; 时, 使用了 Ink 和 public Paper paper = null; Paper 接口 但并 public void print(string str){ /** 不关心其实现 System.out.println(" * 输出字符到纸张使用 "+ ink.getcolor(255, */ 200, 0).+" 颜色打印 "); for(int i=0;i<str.length();++i){// public void putinchar(char 逐字符输出到纸张 c); ink 和 paper 何时 paper.putinchar(str.charat(i)); /** 被实例化呢? * 得到输出到纸张上的内容 System.out.print(paper.getContent()); */ // 将纸张的内容输出 public String getcontent();

怎样使用依赖注入 3 组装打印机 1 为了方便组装, 我们给 Printer 类的 ink 和 paper 属性增加 setter 方法 2 public 创建或得到 class Printer Ink 和 Paper 的实现类相当于 { : 3 使用 Spring public 进行组装 Ink ink ColorInk = 相当于 null; colorink : = new 编辑 applicationcontext.xml TextPaper public Paper ColorInk(); paper 文件 a4paper = new = null; TextPaper();...... a4paper.setcharperline(10); public void setink(ink a4paper.setlineperpage(8); ink) { this.ink = ink; public void setpaper(paper paper) { this.paper = paper; 依赖注入给项目添加 Spring 支持

组装打印机 <bean id="b5paper" 依赖注入 : 组装打印机 class="com.aptech.jb.paper.textpaper"> <bean id="greyink" <property name="charperline" value="6" /> class="com.aptech.jb.ink.greyink" <property name="lineperpage" /> value="5" /> B5 A4 </bean> 双色墨盒 <bean id="colorink" <bean id="a4paper" class="com.aptech.jb.paper.textpaper"> <property name="charperline" class="com.aptech.jb.ink.colorink" /> value="10" /> <property name="lineperpage" <bean value="8" id="printer" /> 彩色墨盒 </bean> class="com.aptech.jb.printer"> <property name="ink" ref="colorink"/> <property name="paper"

4. 运行打印机 怎样使用依赖注入 public static void main(string[] args){ ApplicationContext context = new ClassPathXmlApplicationContext( "applicationcontext.xml"); // 由 Spring 创建配置为使用 printer 对象 greyink, 并根据配置文件注入 // 依赖的组件, a4paper 完成组装时的运行结果配置为使用 colorink Printer printer = 通过 Spring: b5paper (Printer)context.getBean("printer"); 时的运行结果我们可以象更换打 printer.print(" 几位轻量级容器的作者曾骄傲地对我印机的墨盒和打印..."); 纸一样地更换程序组件 这就是依赖注入带来的魔力!!

项目中应用依赖注入 使用依赖注入组装原有系统 private XDAO xdao = null; public void setxdao(xdao dao){ xdao = dao; action action biz biz DAO DAO 依赖 依赖 以前的系统 不再依赖具体实现类 通过 setter 方 <beans> 法运行时注入 <!-- DAO --> <bean id="userdao" class="...userdaojdbcimpl" /> <!-- Biz --> 将组件的实 <bean id="userbiz" 自从有了依赖注入现类硬编码 XDAO xdao class="...userbizimpl"> = new <property name="userdao" XDAOJdbcImpl(); ref="userdao"/> </bean> </beans> 现在的系统

小结 编写 gbeens.xml, 使下面的程序输出 : 张嘎说 : 三天不打小鬼子, 手都痒痒 public static void main(string[] args){ ApplicationContext context = public class Greeting { new private String person ; ClassPathXmlApplicationContext("gbeens.xml"); private String words ; Greeting g = (Greeting)context.getBean("g"); public String setperson(string p){ g. saygreeting(); persion = p; public String setwords(string w){ words = w; public void saygreeting(){ System.out.println(person + " 说 :" + words);

面向方面编程 (AOP) Spring 带来的好处 : 让我们可以 专心做事 依赖注入 (DI) 面向方面编程 (AOP) 怎样实现的呢? 编写程序时不用关心其依赖的组件 将程序中涉及的公共问题集中解决

哪些 方面 需要关注 : Aspect: 方面 public void dosamebusiness (long lparam,string sparam){ // 记录日志 log.info(" 调用 dosamebusiness 方法, 参数是 :"+lparam); // 输入合法性验证 if (lparam<=0){ throws new IllegalArgumentException("xx 应该大于 0"); if (sparam==null sparam.trim().equals("")){ 怎样才能 专心 做 throws new IllegalArgumentException("xx 不能为空 "); 事? // 异常处理我们构建系统的目 try{... 注意力被分散的是解决业务问题了, 业务代码质 catch(...){ 量得不到保障 catch(...){ 在编码实现业务逻 辑前, 需要先解决这些方面又都是 // 事务控制如此繁多而且复杂不可或缺的, 绝 tx.commit(); 的多个方面的事情不能丢开不管 这正是 AOP 要解决的问题, Follow me!

怎样使用 AOP 使用 AOP 方式实现日志系统 业务介绍 : 将业务逻辑层每个方法的调用时间和参数输出到控制台 AOP 思路 : 分别编写业务逻辑代码和 方面 代码, 运行时再组装 1 编写业务逻辑接口和实现类, 不用关心 方面 只需要编写业务逻辑相关的代码

怎样使用 AOP 2 编写方面代码, 实现 MethodBeforeAdvice 接口 将要执行的方法, 参数和对应的对象 编写前置通知需要实现 MethodBeforeAdvice 接口 描述 方面 逻辑的代码 Advice: 通知通知, 定义一个 方面方面 要实现的功能 通过配置, 分前置通知 后置通知 环绕通知和异常通知等类型 前置通知中的代码将在方法调用前自动执行

怎样使用 AOP 3 组装 target: 目标, 被代理的 bean, 包含业务代码代理类 : 最终通过代理类访问业务逻辑通知 bean: 包含 方面 代码 将 业务逻辑代码 和 方面代码 组装进代理类 采用代理的方式

怎样使用 AOP 4 运行面向接口编程, 不涉及具体实现类 得到的是代理类的实例 方法调用前自动执行了 方面 代码

小结 AOP 目标 : 专心做事 AOP 原理 将散布在系统中的公共功能集中解决 AOP 实现 采用一个机制 1. 将复杂的需求分解出不同方面 2. 专心做事 3. 组装起来运行

Spring 的 AOP 机制 小结 在方法调用前 后 环绕或抛出异常时, 织入 方面代码 通过代理访问被代理的类 前置通知 环绕通知 方法执行 后置通知 代理 原 Bean 通知 (Advice)

小结 在线购书系统中, 要求不修改 BookBizImpl 代码的情况下增加如下功能 : 对买书的用户进行返利 : 每买一册书返利 3 元 即 : 每调用一次 buy 方法打印 : [ 销售返利 ][ 时提示 : 1. 间返利是在购书成功后进行的 ] 用户名 : 3 元, 因此应该使用后置通知 1. 返利是在购书成功后进行的, 因此应该使用后置通知 2. 后置通知范例 : public class RakeOffAdvice implements AferReturningAdvice{ public void afterreturning(object returnvalue,method m, Object[] args,object target) throws Throwable{ //TODO:your code here

总结 Spring 包含哪些内容? 依赖注入容器 AOP 实现 DAO/ORM 支持 Web 集成 依赖注入的好处是? 分离组件的使用和实现 Spring 怎么实现依赖注入? 添加 getter/setter 方法, 使用配置文件组装 面向方面编程 的好处是? 将 方面 分离出来, 写代码时只需关注当前业务逻辑 Spring 怎么实现 AOP? 在方法调用前 后或抛出异常时 织入 方面代码