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

下载本文档

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

文档简介

使用Spring容器管理对象回顾补全下面的代码。publicListsearchByTitle(Stringtitle){Sessionsession=();Stringhql="(1)";

(2);//创建Query对象("(3)",title);return(4);}本章任务使用“依赖注入”实现“动态组装”的打印机使用“面向方面编程”实现日志系统配置为使用colorInk、b5Paper时的运行结果配置为使用greyInk、a4Paper时的运行结果掌握Spring依赖注入的原理掌握SpringAOP原理本章目标Spring之父RodJohnsonSpringFramework创始人,interface21CEO丰富的c/c++背景,丰富的金融行业背景1996年开始关注Java服务器端技术和专家组成员2002年著写《Expoertone-on-oneJ2EE设计与开发》,改变了Java世界技术主张:技术实用为本音乐学博士Spring的绿草丛Spring:轻量级框架,JavaEE的春天,当前主流框架目标:使现有技术更加易用,推进编码最佳实践内容:依赖注入容器,AOP实现(声明式事务),DAO/ORM支持,Web集成为什么使用依赖注入(DI)面向对象使系统的实现变得容易当系统复杂到一定程度时,仅仅面向对象就不够了目的:解耦合。实现每个组件块时只关注组件内部的事情要点:明确定义组件间的接口“过于”复杂的软件系统组件化的思想依赖注入:强制将组件的构建和使用分开组件的使用组件的生产接口的定义运行时注入如何开发一个打印机?

打印机功能的实现依赖于墨盒和纸张。步骤:1、定义墨盒和纸张的接口标准。2、使用接口标准开发打印机。3、组装打印机。4、运行打印机。怎样使用依赖注入A4B5彩色墨盒双色墨盒怎样使用依赖注入定义组件接口墨盒接口:Ink纸张接口:Page使用接口开发打印机publicinterfaceInk{publicStringgetColor(intr,intg,intb);}publicinterfacePaper{publicstaticfinalStringnewline="\r\n";/***输出字符到纸张*/publicvoidputInChar(charc);/***得到输出到纸张上的内容*/publicStringgetContent();}publicclassPrinter{ publicInkink=null; publicPaperpaper=null; publicvoidprint(Stringstr){ ("使用"+ ink.getColor(255,200,0).+"颜色打印"); for(inti=0;i<str.length();++i){//逐字符输出到纸张 paper.putInChar(str.charAt(i)); } System.out.print(paper.getContent());//将纸张的内容输出 }}我们在开发打印机时,使用了Ink和Paper接口。但并不关心其实现。ink和paper何时被实例化呢?怎样使用依赖注入3、组装打印机1、为了方便组装,我们给Printer类的ink和paper属性增加setter方法2、创建或得到Ink和Paper的实现类3、使用Spring进行组装 编辑文件publicclassPrinter{ publicInkink=null; publicPaperpaper=null; ...... publicvoidsetInk(Inkink){ =ink; } publicvoidsetPaper(Paperpaper){ =paper; }}给项目添加Spring支持相当于:ColorInkcolorInk=newColorInk();相当于:TextPapera4Paper=newTextPaper();a4Paper.setCharPerLine(10);a4Paper.setLinePerPage(8);依赖注入组装打印机依赖注入:组装打印机A4B5双色墨盒彩色墨盒<beanid="printer" class=""><propertyname="ink"ref="colorInk"/><propertyname="paper"ref="a5Paper"/></bean><beanid="colorInk"class=""/><beanid="greyInk"class=""/><beanid="b5Paper"class=""><propertyname="charPerLine"value="6"/><propertyname="linePerPage"value="5"/></bean><beanid="a4Paper"class=""><propertyname="charPerLine"value="10"/><propertyname="linePerPage"value="8"/></bean>怎样使用依赖注入4.运行打印机publicstaticvoidmain(String[]args){ ApplicationContextcontext= newClassPathXmlApplicationContext( ""); //由Spring创建printer对象,并根据配置文件注入 //依赖的组件,完成组装 Printerprinter=(Printer)context.getBean("printer"); ("几位轻量级容器的作者曾骄傲地对我...");}配置为使用greyInk、a4Paper时的运行结果通过Spring:我们可以象更换打印机的墨盒和打印纸一样地更换程序组件。这就是依赖注入带来的魔力!!配置为使用colorInk、b5Paper时的运行结果项目中应用依赖注入使用依赖注入组装原有系统actionbizDAO依赖依赖XDAOxDAO= newXDAOJdbcImpl();将组件的实现类硬编码以前的系统自从有了依赖注入...privateXDAOxDAO=null;publicvoidsetXDAO(XDAOdao){ xDAO=dao;}不再依赖具体实现类。通过setter方法运行时注入。<beans><!--DAO--><beanid="userDAO" class="...UserDAOJdbcImpl"/><!--Biz--><beanid="userBiz" class="...UserBizImpl"><propertyname="userDAO" ref="userDAO"/></bean></beans>现在的系统小结编写,使下面的程序输出: “张嘎说:三天不打小鬼子,手都痒痒”publicclassGreeting{privateStringperson;privateStringwords;publicStringsetPerson(Stringp){ persion=p;}publicStringsetWords(Stringw){ words=w;}publicvoidsayGreeting(){ System.out.println(person+"说:"+words);}}publicstaticvoidmain(String[]args){ApplicationContextcontext=new");Greetingg=(Greeting)context.getBean("g");g.sayGreeting(); }面向方面编程(AOP)Spring带来的好处:让我们可以“专心做事”依赖注入(DI)编写程序时不用关心其依赖的组件面向方面编程(AOP)将程序中涉及的公共问题集中解决怎样实现的呢?Aspect:方面哪些“方面”需要关注:publicvoiddoSameBusiness(longlParam,StringsParam){//记录日志("调用doSameBusiness方法,参数是:"+lParam);//输入合法性验证if(lParam<=0){throwsnewIllegalArgumentException("xx应该大于0");}if(sParam==null||sParam.trim().equals("")){throwsnewIllegalArgumentException("xx不能为空");}//异常处理try{...}catch(...){}catch(...){}//事务控制();}我们构建系统的目的是解决业务问题在编码实现业务逻辑前,需要先解决如此繁多而且复杂的多个方面的事情注意力被分散了,业务代码质量得不到保障这些方面又都是不可或缺的,绝不能丢开不管这正是AOP要解决的问题,Followme!怎样才能“专心”做事?怎样使用AOP使用AOP方式实现日志系统业务介绍:将业务逻辑层每个方法的调用时间和参数输出到控制台AOP思路:分别编写业务逻辑代码和“方面”代码,运行时再组装1、编写业务逻辑接口和实现类,不用关心“方面”只需要编写业务逻辑相关的代码怎样使用AOP2、编写方面代码,实现MethodBeforeAdvice接口编写前置通知需要实现MethodBeforeAdvice接口。Advice:通知,定义一个“方面”要实现的功能。 分前置通知、后置通知、环绕通知和异常通知等类型。通过配置,前置通知中的代码将在方法调用前自动执行。将要执行的方法,参数和对应的对象描述“方面”逻辑的代码怎样使用AOP3、组装采用代理的方式target:目标,被代理的bean,包含业务代码通知bean:包含“方面”代码代理类:最终通过代理类访问业务逻辑将“业务逻辑代码”和“方面代码”组装进代理类怎样使用AOP4、运行得到的是代理类的实例面向接口编程,不涉及具体实现类方法调用前自动执行了“方面”代码小结AOP目标:专心做事AOP原理将散布在系统中的公共功能集中解决AOP实现采用一个机制 1.将复杂的需求分解出不同方面 2.专心做事 3.组装起来运行小结Spring的AOP机制在方法调用前、后、环绕或抛出异常时,“织入”方面代码通过代理访问被代理的类环绕通知方法执行前置通知后置通知代理原Bean通知(Advice)小结在线购书系统中,要求不修改BookBizImpl代码的情况下增加如下功能:对买书的用户进行返利:每买一册书返利3元。即:每调用一次buy方法打印:“[销售返利][时间]用户名:返利3元。”提示:1.

温馨提示

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

评论

0/150

提交评论