Java_静态代理和动态代理

Java_静态代理和动态代理

ID:37710506

大小:20.28 KB

页数:5页

时间:2019-05-29

Java_静态代理和动态代理_第1页
Java_静态代理和动态代理_第2页
Java_静态代理和动态代理_第3页
Java_静态代理和动态代理_第4页
Java_静态代理和动态代理_第5页
资源描述:

《Java_静态代理和动态代理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Java静态代理和动态代理Java 2010-10-1617:22:21 阅读129 评论0  字号:大中小 订阅代理模式主要有两种:静态代理和动态代理 1.静态代理: 比如要在输出“HelloWorld”前打印一个字符串“Welcome”A:先定义一个接口类 package proxy;publicinterface HelloWorld{    publicvoidprint();// publicvoidsay();}B:定义一个该接口的实现类 package proxy;   publicclassHelloWorldI

2、mplimplementsHelloWorld{    publicvoidprint(){    System.out.println("HelloWorld");       }   // publicvoidsay(){   //     System.out.println("SayHello!");   // }   }  C:定义一个静态代理类 package proxy; publicclass StaticProxy implements HelloWorld{        public HelloWorldh

3、elloWorld;        public StaticProxy(HelloWorldhelloWorld){            this.helloWorld=helloWorld;        }        publicvoid print(){         System.out.println("Welcome");            //相当于回调            helloWorld.print();        }        // publicvoidsay(){   //   

4、  //相当于回调   //     helloWorld.say();   // }   }   D:一个测试类: package proxy;   publicclassTestStaticProxy{      publicstaticvoidmain(String[]args){           HelloWorldhelloWorld=newHelloWorldImpl();           StaticProxystaticProxy=newStaticProxy(helloWorld);          

5、 staticProxy.print();  //     staticProxy.say();       }   }可以看出静态代理类有一个很的缺点:当如果接口加一个方法(把上面所有的代码的注释给去掉),所有的实现类和代理类里都需要做个实现,增加了代码的复杂度。 2.动态代理      动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到一个集中的方法中处理(invoke),而不需要像静态代理那样对接口的每一个方法进行中转。      动态代理类只能代理接口,代理类都需要实现InvocationHandler

6、接口,覆盖invoke方法。该invoke方法就是调用被代理接口的所有方法时需要调用的。C:定义动态代理类:(A、B如上)packageproxy;              importjava.lang.reflect.InvocationHandler;       importjava.lang.reflect.Method;       importjava.lang.reflect.Proxy;       //动态代理类只能代理接口,代理类都需要实现InvocationHandler类,实现invoke方法。//该

7、invoke方法就是调用被代理接口的所有方法时需要调用的       publicclassDynamicProxyimplementsInvocationHandler{      privateObjectobject;            //绑定关系,也就是关联到哪个接口(与具体的实现类绑定)的方法被调用时,执行invoke方法。    //Proxy.newProxyInstance//构造一个实现给定接口的代理类的实例,所有方法都将调用给定处理器对象的invoke方法。//第一个参数表明类加载器,一般为null//

8、第二个参数表明代理类实现的接口//第三个参数表明这些被拦截的方法执行时需要执行哪个InvocationHandler的invoke方法    publicObjectbindRelation(Objectobject){       this.object=ob

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。