SpringFrameworkAOP..ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SpringFrameworkAOP..ppt

AOP 目标 理解什么是AOP Spring中的AOP 什么是AOP Aspect-oriented programming 面向切面编程 AOP并不会取代OOP,而是作为OOP的补充。 AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。 记录日志在代码中无处不在 先来看一个例子 为了跟踪应用程序的运行过程,很多方法都需要记录日志信息。我们一般这样写: package com.aptech.aop2; import org.apache.log4j.Logger; public class Person { private Logger logger = Logger.getLogger(Person.class); public void sleep(){ logger.info(“开始执行时间:“ + new Date()); System.out.println(睡觉中); logger.info(“执行结束时间:” + new Date()); } public void eating(){ logger.info(开始执行时间:“ + new Date()); System.out.println(正在吃饭中); logger.info(“执行结束时间:” + new Date()); } } 提问:弊端在哪里? 混淆了业务方法本身的职责 维护工作量巨大 解决方案1-静态代理 目地是将业务代码与日志代码完全分离,实现松散耦合. 代理对象与被代理对象必须实现同一接口,在代理对象中实现与日志记录的相关服务,并在需要的时候呼叫被代理对象,而被代理对象只保留业务代码. 静态代理实现 接口: package com.aptech.aop2; public interface IPerson { public abstract void sleep(); public abstract void eating(); } 被代理类 package com.aptech.aop2; public class Person implements IPerson { public void sleep(){ System.out.println(睡觉中); } public void eating(){ System.out.println(正在吃饭中); } } 代理类 package com.aptech.aop2; import org.apache.log4j.Logger; public class PersonProxy implements IPerson { private IPerson person; private Logger logger = Logger.getLogger(PersonProxy.class); public PersonProxy(IPerson person) { this.person = person; } public void eating() { logger.info(开始执行时间:“ + new Date());person.eating(); logger.info(“执行结束时间:” + new Date()); } public void sleep() { logger.info(开始执行时间:“ + new Date());person.sleep(); logger.info(“执行结束时间:” + new Date()); } } 测试类 package com.aptech.aop2; public class PersonTest { public static void main(String[] args) { IPerson proxy = new PersonProxy(new Person()); proxy.eating(); proxy.sleep(); } } 静态代理的弊端 一个代理接口只能服务于一种类型的对象.对于稍大点的项目根本无法胜任. 解决方案2-动态代理 在JDK1.3之后加入了可协助开发的动态代理功能.不必为特定对象与方法编写特定的代理对象,使用动态代理,可以使得一个处理者(Handler)服务于各个对象. 一个处理者的类设计必须实现java.lang.reflect.InvocationHandler接口. 通过InvocationHandler接口实现的动态代理只能代理接口的实现类. 动态代理实现 处理者(H

文档评论(0)

文档资料 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档