当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

<b>Java的代理情势</b>[Java编程]

赞助商链接



  本文“<b>Java的代理情势</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
前几天一个网友指出了我的文章中一些有失偏颇之处,那些文章都是我在阅读Java Core的时刻做的总结,趁便加上我个人的一些理解.因为看的e文版,理解上有些地方大概还不当.下面谈一下对Java中代理情势(Proxy)的熟习.

代理,想必大家都应当知道是什么冬冬了,普通的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看做是一种代理情势.下面我挑选以下的一种情形来举行报告:某董事长出差,但是此时公司有个集会,董事长买单,但是由他的秘书去结帐.我们就姑且把这个看做一个代理行为,^_^.

首先我们定义一个接口:商人(Merchant),以下所示:

package cn.edu.hust.cm.test;

public interface Merchant {

    void treat();//商人都要宴客吃饭滴,^_^

}

    然后我们定义一个类:董事长(Director),以下所示:

package cn.edu.hust.cm.test;

public class Director implements Merchant {

       public Director() {

       }

       public void treat() {

              System.out.println("董事长请大家吃饭");

       }

}

OK,我们目前要给他找代理了,这个代理就是他的秘书(Secretary).这里要触及到一些代理的机制了.在Java中,用来做代理的类普通都要实现InvocationHandler,实现它的invoke办法,至于为啥是这样俺也不知道了,^_^.别的,当我们产生一个代理实例(proxy instance)的时刻,只要我们通过这个实例调用任何办法,城市招致invoke办法的调用,还是看例子吧,以下所示:

package cn.edu.hust.cm.test;

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

 

public class Secretary implements InvocationHandler {

       public Secretary(Director director) {

              this.director=director;

       }

       public Object invoke(Object arg0, Method arg1, Object[] arg2)

                     throws Throwable {

        director.treat();

              System.out.println("由秘书结帐咯!");

              return null;

       }

       private Director director;

}

目前我们开始构建我们的主体测试代码,以下面的代码所示:

package cn.edu.hust.cm.test;


import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;


public class ProxyTest extends Proxy {

       public ProxyTest(InvocationHandler arg0) {

              super(arg0);

       }

       public static void main(String[] args) {

              Director director=new Director();

              InvocationHandler secretary=new Secretary(director);

              Merchant merchant=(Merchant)Proxy.newProxyInstance(director.getClass().getClassLoader(),director.getClass().getInterfaces(),secretary);

              merchant.treat();

       }

}

运路程序,输出将为:董事长宴客

由秘书结帐咯!

这里有几个要阐明的地方,以下所述:

1.Proxy.newProxyInstance办法的作用,它的作用为某个对象成立一个代理对象,本例中是为director成立了一个代理对象,这个对象属于哪个类呢?我们在程序里面加这样一句System.out.println(merchant.getClass().getName()),输出是$Proxy0,呵呵,阐明已经产生了一个代理类了,这个类实现了director所属类中的全部接口.

2.代理的实现机制问题.个人认为这个仿佛就是一个事件处理的机制,现代理对象调用某个办法的时刻,就会触发呼应的invoke办法.因此Proxy.newProxyInstance办法的第三个参数就相当于给这个代理对象注册了一个监听器.

Proxy类还有几个办法,用法可以查看呼应的API文档.


  以上是“<b>Java的代理情势</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .