0015-每特教育蚂蚁课堂springaop编程_第1页
0015-每特教育蚂蚁课堂springaop编程_第2页
0015-每特教育蚂蚁课堂springaop编程_第3页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、P 编程Sprin课程目标设计模式 Spring 的环境搭建 SpringIOC 与 AOPSpring 事物与行为一、模式1.1 概述(Proxy)是一种设计模式, 提供了对目标对象另外的方式;即通过目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。举例:(目标)-经纪人用户()模式的关键点:对象与目标对象。1.2 静态静态1)2),对象,要实现与目标对象一样的接口;举例:保存用户(模拟),直接保存Proxy, 给保存方法添加事务处理总结静态:可以做到在不修改目标对象的功能前提下,对目标对象功能扩展。缺点:- 因为对象,需要与目标对象实现一样的接

2、口。所以会有很多类,类太多。-一旦接口增加方法,目标对象与对象都要。解决:工厂?可以使用动态。1.3 动态动态1)2),对象,不需要实现接口;对象的生成,是利用 JDKAPI, 动态的在内存中构建对象(需要指定创建对象/目标对象 实现的接口的类型;);3)动态, JDK, 接口;JDK 中生成|- Proxy对象的 API:sic Object newProxyInstance(ClassLoader loader,指定当前目标对象使用类加载器目标对象实现的接口的类型事件处理器Classerfa,InvocationHandler h)动态总结:对象不需要实现接口,但是目标对象一定要实现接口;

3、否则不能用动态!(class$Proxy0implements Iuser)思考:有一个目标对象,想要功能扩展,但目标对象没有实现接口,怎样功能扩展?ClassUser/ 子类的方式ClasbclassextendsUser以子类的方式实现(cglib)1.4 Cglib,也叫做子类。在内存中构建一个子类对象从而实现对目标对象功能的扩展。CglibJDK 的动态如果想有一个限制,就是使用动态的对象必须实现一个或多个接口。没有实现接口的类,就可以使用 CGLIB 实现。CGLIB 是一个强大的高性能的代码生成包,它可以在运行期扩展Java 类与实现Java接口。它广泛的被许多 AOP 的框架使用

4、,例如 Spring AOP 和 dynaop,为他们提供方法的erception()。CGLIB 包的底层是通过使用一个小而快的字节码处理框架 ASM,来转换字节码并生成新的类。不鼓励直接使用 ASM,因为它要求你必须对 JVM件的格式和指令集都很熟悉。结构包括 class 文Cglib 子类:1) 需要引入cglib jar 文件, 但是 spring 的引入 spring-core-3.2.5.jar 即可。包中已经包括了 cglib 功能,所以直接引入功能包后,就可以在内存中动态构建子类的类不能为 final, 否则报错。目标对象的方法如果为 final/sic, 那么就不会被的业务方

5、法。,即不会执行目标对象额外在 Spring 的 AOP 编程中,如果加入容器的目标对象有实现接口,用 JDK;如果目标对象没有实现接口,用 Cglib;二、手动实现 AOP 编程AOP 面向切面的编程,AOP 可以实现“业务代码”与“关注点代码”分离分析总结:关注点代码,就是指重复执行的代码。业务代码与关注点代码分离,好处?- 关注点代码写一次即可;-开发者只需要关注业务;-运行时期,执行业务代码时候动态植入关注点代码; 【】如何分离?过程式/对象式/模式分离/ 保存一个用户public void add(User user) Sesses= null; Tran ion trans = n

6、ull; try ses= HibernateSesFactoryUtils.getSes();/ 【关注点代码】trans = ses.begranion();/ 【关注点代码】ses.save(user);/业务代码mit();/【关注点代码】 catch (Exception e) e.prStackTrace(); if(trans != null)trans.rollback();/.【关注点代码】 finallyHibernateSesFactoryUtils.closeSes(ses);/.【关注点代码】三、AOP 编程3.1 概述:Aop, aspect object prog

7、ramming面向切面编程功能: 让关注点代码与业务代码分离!关注点,重复代码就叫做关注点;切面,关注点形成的类,就叫切面(类)!面向切面编程,就是指 对很多功能都有的重复的代码抽取,再在运行的时候网业务方法上动态植入“切面类代码”。切入点,执行目标对象方法,动态植入切面代码。可以通过切入点表达式,指定切面类代码。哪些类的哪些方法; 给指定的类在运行的时候植入3.2 注解方式实现 AOP 编程步骤:1) 先引入 aop 相关 jar 文件(aspectjaop 优秀组件)【spring3.2 源码】【spring2.5 源码/lib/aopalliance】【spring2.5 源码/lib/

8、aspectj】或【aspectj-1.8.2lib】【spring2.5 源码/lib/aspectj】或【aspectj-1.8.2lib】sprinp-3.2.5.RELEASE.jaraopalliance.jaraspectjweaver.jar aspectjrt.jar注意: 用到 spring2.5 版本的 jar 文件,如果用 jdk1.7 可能会有问题。需要升级 aspectj 组件,即使用 aspectj-1.8.2 版本中提供 jar 文件提供。2) bean.xml 中引入 aop 名称空间3) 开启 aop 注解4) 使用注解Aspect指定一个类为切面类Pocut

9、(execution(* com.itmayiedu.service.UserService.add(.)指定切入点表达式前置通知: 目标方法之前执行Before(poCut_()后置通知:目标方法之后执行(始终执行)返回后通知: 执行方法结束前执行(异常不执行)异常通知:出现异常时候执行After(poCut_()AfterReturning(poCut_() AfterThrowing(poCut_()环绕通知:环绕目标方法执行Around(poCut_()3.3 XML 方式实现 AOP 编程Xml 实现 aop 编程:Component Aspectpublic class Aop B

10、efore(execution(* com.itmayiedu.service.UserService.add(.) public void begin() System.out.prln(前置通知);After(execution(* com.itmayiedu.service.UserService.add(.) public void commit() System.out.prln(后置通知);AfterReturning(execution(* com.itmayiedu.service.UserService.add(.) public void afterReturning()

11、System.out.prln(运行通知);AfterThrowing(execution(* com.itmayiedu.service.UserService.add(.) public void afterThrowing() System.out.prln(异常通知);Around(execution(* com.itmayiedu.service.UserService.add(.)public void around(ProceedingJoinPoproceedingJoinPo) throws Throwable System.out.prln(我是环绕通知-前);proceedingJoinPceed(); System.out.prln(我是环绕通知-后);引入 jar

温馨提示

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

评论

0/150

提交评论