08 使用Spring容器管理对象.ppt_第1页
08 使用Spring容器管理对象.ppt_第2页
08 使用Spring容器管理对象.ppt_第3页
08 使用Spring容器管理对象.ppt_第4页
08 使用Spring容器管理对象.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章,使用Spring容器管理对象,All Right Reserved Copyright 中南大学 2010,回顾,补全下面的代码。,public List searchByTitle(String title) Session session = super.getSession(); String hql = (1) ; (2) ;/创建Query对象 query.setString( (3) , title); return (4) ; ,All Right Reserved Copyright 中南大学 2010,预习检查,根据你的理解,“依赖注入”是什么? 根据你的理解,谈谈“

2、依赖注入”适于在项目中应用吗? 你理解的“面向方面编程(AOP)”是什么样的?,All Right Reserved Copyright 中南大学 2010,本章任务,使用“依赖注入”实现“动态组装”的打印机 使用“面向方面编程”实现日志系统,配置为使用colorInk、 b5Paper时的运行结果,配置为使用greyInk、 a4Paper时的运行结果,All Right Reserved Copyright 中南大学 2010,掌握Spring依赖注入的原理 掌握Spring AOP原理,本章目标,All Right Reserved Copyright 中南大学 2010,Spring之

3、父,Rod Johnson SpringFramework创始人, interface21 CEO 丰富的c/c+背景,丰富的金融行业背景 1996年开始关注Java服务器端技术 Servlet2.4和JDO2.0专家组成员 2002年著写Expoert one-on-one J2EE设计与开发,改变了Java世界 技术主张:技术实用为本 音乐学博士,All Right Reserved Copyright 中南大学 2010,Spring的绿草丛,Spring : 轻量级框架, Java EE的春天,当前主流框架 目标: 使现有技术更加易用,推进编码最佳实践 内容: 依赖注入容器,AOP实现

4、(声明式事务), DAO/ORM支持,Web集成,“过于”复杂的软件系统 组件化的思想 依赖注入:强制将组件的构建和使用分开,All Right Reserved Copyright 中南大学 2010,为什么使用依赖注入(DI),面向对象使系统的实现变得容易,当系统复杂一定程度时,仅仅面向 象到就不够了,目的:解耦合。实现每个组件块时只关注组件内部的事情,要点:明确定义组件间的接口,组件的使用,组件的生产,接口的定义,运行时注入,All Right Reserved Copyright 中南大学 2010,如何开发一个打印机? 打印机功能的实现依赖于 墨盒 和 纸张。 步骤: 1、定义墨盒和

5、纸张的接口标准。 2、使用接口标准开发打印机。 3、组装打印机。 4、运行打印机。,怎样使用依赖注入,彩色墨盒,双色墨盒,All Right Reserved Copyright 中南大学 2010,怎样使用依赖注入,定义组件接口 墨盒接口:Ink 纸张接口:Page 使用接口开发打印机,public interface Ink public String getColor(int r,int g,int b); ,public interface Paper public static final String newline = rn; /* * 输出字符到纸张 */ public voi

6、d putInChar(char c); /* * 得到输出到纸张上的内容 */ public String getContent(); ,public class Printer public Ink ink = null; public Paper paper = null; public void print(String str) System.out.println(使用+ ink.getColor(255, 200, 0).+颜色打印); for(int i=0;istr.length();+i)/ 逐字符输出到纸张 paper.putInChar(str.charAt(i); S

7、ystem.out.print(paper.getContent(); / 将纸张的内容输出 ,我们在开发打印机时,使用了Ink和Paper接口。但并不关心其实现。,ink和paper何时被实例化呢?,3、组装打印机 1、为了方便组装,我们给Printer类的ink和paper属性增加setter方法 2、创建或得到Ink和Paper的实现类 3、使用Spring进行组装 编辑applicationContext.xml文件,All Right Reserved Copyright 中南大学 2010,public class Printer public Ink ink = null; pu

8、blic Paper paper = null; . . public void setInk(Ink ink) this.ink = ink; public void setPaper(Paper paper) this.paper = paper; ,怎样使用依赖注入,给项目添加Spring支持,相当于: ColorInk colorInk = new ColorInk();,相当于: TextPaper a4Paper = new TextPaper(); a4Paper.setCharPerLine(10); a4Paper.setLinePerPage(8);,依赖注入,All Ri

9、ght Reserved Copyright 中南大学 2010,组装打印机,依赖注入:组装打印机, , , ,All Right Reserved Copyright 中南大学 2010,怎样使用依赖注入,4. 运行打印机,public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext( applicationContext.xml); / 由Spring创建printer对象,并根据配置文件注入 / 依赖的组件,完成组装 Printer printer

10、= (Printer)context.getBean(printer); printer.print(几位轻量级容器的作者曾骄傲地对我.); ,配置为使用greyInk、 a4Paper时的运行结果,通过Spring: 我们可以象更换打印机的墨盒和打印纸一样地更换程序组件。 这就是依赖注入带来的魔力!,配置为使用colorInk、 b5Paper时的运行结果,All Right Reserved Copyright 中南大学 2010,项目中应用依赖注入,使用依赖注入组装原有系统,action,biz,DAO,XDAO xDAO = new XDAOJdbcImpl();,将组件的实现类硬编码

11、,以前的系统,自从有了依赖注入 .,private XDAO xDAO = null; public void setXDAO(XDAO dao) xDAO = dao; ,不再依赖具体实现类。通过setter方法运行时注入。, ,现在的系统,All Right Reserved Copyright 中南大学 2010,小结,编写gbeens.xml,使下面的程序输出: “张嘎说:三天不打小鬼子,手都痒痒”,public class Greeting private String person ; private String words ; public String setPerson(S

12、tring p) persion = p; public String setWords(String w) words = w; public void sayGreeting() System.out.println(person + 说: + words); ,public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext(gbeens.xml); Greeting g = (Greeting)context.getBean(g); g. sayGre

13、eting(); ,All Right Reserved Copyright 中南大学 2010,面向方面编程(AOP),Spring带来的好处:让我们可以 “专心做事”,依赖注入 (DI),编写程序时不用关心其依赖的组件,面向方面编程 (AOP),将程序中涉及的公共问题集中解决,怎样实现的呢?,All Right Reserved Copyright 中南大学 2010,Aspect:方面,哪些“方面”需要关注:,public void doSameBusiness (long lParam,String sParam) / 记录日志 (调用 doSameBusiness方法

14、,参数是:+lParam); / 输入合法性验证 if (lParam=0) throws new IllegalArgumentException(xx应该大于0); if (sParam=null | sParam.trim().equals() throws new IllegalArgumentException(xx不能为空); / 异常处理 try . catch(.) catch(.) / 事务控制 mit(); ,我们构建系统的目的是解决业务问题,在编码实现业务逻辑前,需要先解决如此繁多而且复杂的多个方面的事情,注意力被分散了,业务代码质量得不到保障,这些方面又都是不可或缺的,

15、绝不能丢开不管,这正是AOP要解决的问题,Follow me!,怎样才能“专心”做事?,All Right Reserved Copyright 中南大学 2010,怎样使用AOP,使用AOP方式实现日志系统 业务介绍:将业务逻辑层每个方法的调用时间和参数输出到控制台 AOP思路:分别编写 业务逻辑代码 和 “方面”代码,运行时再组装 1、编写业务逻辑接口和实现类,不用关心“方面”,只需要编写业务逻辑相关的代码,All Right Reserved Copyright 中南大学 2010,怎样使用AOP,2、编写方面代码,实现 MethodBeforeAdvice接口,编写前置通知需要实现Me

16、thodBeforeAdvice接口。,Advice:通知,定义一个“方面”要实现的功能。 分前置通知、后置通知、环绕通知和异常通知等类型。,通过配置,前置通知中的代码将在方法调用前自动执行。,将要执行的方法,参数和对应的对象,描述“方面”逻辑的代码,All Right Reserved Copyright 中南大学 2010,怎样使用AOP,3、组装,采用代理的方式,target:目标,被代理的bean,包含业务代码,通知bean:包含“方面”代码,代理类:最终通过代理类访问业务逻辑,将“业务逻辑代码”和“方面代码”组装进代理类,All Right Reserved Copyright 中南

17、大学 2010,怎样使用AOP,4、运行,得到的是代理类的实例,面向接口编程,不涉及具体实现类,方法调用前自动执行了“方面”代码,All Right Reserved Copyright 中南大学 2010,小结,AOP目标:专心做事 AOP原理 将散布在系统中的公共功能集中解决 AOP实现 采用一个机制 1. 将复杂的需求分解出不同方面 2. 专心做事 3. 组装起来运行,All Right Reserved Copyright 中南大学 2010,小结,Spring的AOP机制 在方法调用前、后、环绕或抛出异常时,“织入”方面代码 通过代理访问被代理的类,All Right Reserved Copyright 中南大学 2010,小结,在线购书系统中,要求不修改BookBizImpl代码的情况下增加如下功能: 对买书的用户进行返利:每买一册书返利3元。 即:每调用一次buy方法打印:“销售返利时间用户名:返利3元。”,提示: 1. 返利是在购书成功后进行的,因此应该使用后置通知。 2. 后置通知范例: public class RakeOffAdvice implements AferReturningAdvice public void afterReturning(Object returnValue,Method m, Object ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论