打字猴:1.70046086e+09
1700460860 //被代理的实例
1700460861
1700460862 Object obj=null;
1700460863
1700460864 //我要代理谁
1700460865
1700460866 public GamePlayIH(Object_obj){
1700460867
1700460868 this.obj=_obj;
1700460869
1700460870 }
1700460871
1700460872 //调用被代理的方法
1700460873
1700460874 public Object invoke(Object proxy,Method method,Object[]args)
1700460875
1700460876 throws Throwable{
1700460877
1700460878 Object result=method.invoke(this.obj,args);
1700460879
1700460880 return result;
1700460881
1700460882 }
1700460883
1700460884 }
1700460885
1700460886 其中invoke方法是接口InvocationHandler定义必须实现的,它完成对真实方法的调用。我们来详细讲解一下InvocationHanlder接口,动态代理是根据被代理的接口生成所有的方法,也就是说给定一个接口,动态代理会宣称“我已经实现该接口下的所有方法了”,那各位读者想想看,动态代理怎么才能实现被代理接口中的方法呢?默认情况下所有的方法返回值都是空的,是的,代理已经实现它了,但是没有任何的逻辑含义,那怎么办?好办,通过InvocationHandler接口,所有方法都由该Handler来进行处理,即所有被代理的方法都由InvocationHandler接管实际的处理任务。
1700460887
1700460888 我们接下来看看场景类,如代码清单12-23所示。
1700460889
1700460890 代码清单12-23 动态代理的场景类
1700460891
1700460892 public class Client{
1700460893
1700460894 public static void main(String[]args)throws Throwable{
1700460895
1700460896 //定义一个痴迷的玩家
1700460897
1700460898 IGamePlayer player=new GamePlayer(“张三”);
1700460899
1700460900 //定义一个handler
1700460901
1700460902 InvocationHandler handler=new GamePlayIH(player);
1700460903
1700460904 //开始打游戏,记下时间戳
1700460905
1700460906 System.out.println(“开始时间是:2009-8-25 10:45”);
1700460907
1700460908 //获得类的class loader
1700460909
[ 上一页 ]  [ :1.70046086e+09 ]  [ 下一页 ]