08 使用spring容器管理对象

上传人:第*** 文档编号:53483103 上传时间:2018-09-01 格式:PPT 页数:25 大小:2.10MB
返回 下载 相关 举报
08 使用spring容器管理对象_第1页
第1页 / 共25页
08 使用spring容器管理对象_第2页
第2页 / 共25页
08 使用spring容器管理对象_第3页
第3页 / 共25页
08 使用spring容器管理对象_第4页
第4页 / 共25页
08 使用spring容器管理对象_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《08 使用spring容器管理对象》由会员分享,可在线阅读,更多相关《08 使用spring容器管理对象(25页珍藏版)》请在金锄头文库上搜索。

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 JohnsonSpringFramework创始人, 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 void pu

6、tInChar(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);System.out

7、.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;public Paper

8、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 Right Reserved

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

10、tBean(“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(String p)persion = p; pu

12、blic 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. sayGreeting(); ,All Right Res

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

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

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

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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号