网站大量收购独家精品文档,联系QQ:2885784924

Java动态代理一——动态类Proxy的使用.doc

Java动态代理一——动态类Proxy的使用.doc

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

Java动态代理一——动态类Proxy的使用 1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实。代理一般会实现它所表示的实际对象的接口。代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统的实际功能,代理对象对客户隐藏了实际对象。客户不知道它是与代理打交道还是与实际对象打交道。 2.为什么使用动态代理? 答:因为动态代理可以对请求进行任何处理 3.使用它有哪些好处? 答:因为动态代理可以对请求进行任何处理 4.哪些地方需要动态代理? 答:不允许直接访问某些类;对访问要做特殊处理等 目前Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。 其实现主要通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。? Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现 以下为模拟案例,通过动态代理实现在方法调用前后向控制台输出两句字符串 目录结构 br/ 定义一个HelloWorld接口 1 package com.ljq.test; 2 3 ?/** 4 * 定义一个HelloWorld接口 5 * 6 * @author jiqinlin 7 * 8 */ 9 ?public interface HelloWorld { 10 public void sayHelloWorld(); 11 } br/ 类HelloWorldImpl是HelloWorld接口的实现 1 package com.ljq.test; 2 3 ?/** 4 * 类HelloWorldImpl是HelloWorld接口的实现 5 * 6 * @author jiqinlin 7 * 8 */ 9 ?public class HelloWorldImpl implements HelloWorld{ 10 11 public void sayHelloWorld() { 12 System.out.println(HelloWorld!); 13 } 14 15 } HelloWorldHandler是 InvocationHandler接口实现 1 package com.ljq.test; 2 3 ?import java.lang.reflect.InvocationHandler; 4 ?import java.lang.reflect.Method; 5 6 ?/** 7 * 实现在方法调用前后向控制台输出两句字符串 8 * 9 * @author jiqinlin 10 * 11 */ 12 ?public class HelloWorldHandler implements InvocationHandler{ 13 //要代理的原始对象 14 ? private Object obj; 15 16 public HelloWorldHandler(Object obj) { 17 super(); 18 this.obj = obj; 19 } 20 21 /** 22 * 在代理实例上处理方法调用并返回结果 23 * 24 * @param proxy 代理类 25 * @param method 被代理的方法 26 * @param args 该方法的参数数组 27 */ 28 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 29 Object result = null; 30 //调用之前 31 ? doBefore(); 32 //调用原始对象的方法 33 result=method.invoke(obj, args); 34 //调用之后 35 doAfter(); 36 return result; 37 } 38 39 private void doBefore(){ 40 System.out.println(before method invoke); 41

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档