黑马程序员技术交流社区

标题: 反射机制中动态代理代码错误??? [打印本页]

作者: 心?=忐§忑]    时间: 2014-4-21 21:57
标题: 反射机制中动态代理代码错误???
  1. package cyc.dl;
  2. public interface Subject {  //定义接口
  3.      public String say(String name,int age ) ;
  4. }


  5. package cyc.dl;
  6. public class RealSubject implements Subject {  //实现接口
  7.     public String say(String name,int age){
  8.             return "姓名:" + name + "年龄:" + age ;
  9.     }
  10. }


  11. package cyc.dl;
  12. import java.lang.reflect.InvocationHandler;
  13. import java.lang.reflect.Method;
  14. import java.lang.reflect.Proxy;
  15. public class MyInvocationHandler implements InvocationHandler{ //代理类
  16.     private Object obj;   //定义一个真实主体  
  17.     public Object bind(Object obj){   //用一个方法绑定真实操作主体
  18.             this.obj = obj ;
  19.             return Proxy.newProxyInstance(obj.getClass().getClassLoader(), //类加载器   此语句什么作用,参数,this是啥
  20.           obj.getClass().getInterfaces(), this);  //取得代理对象
  21.     }
  22.     public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
  23.             Object temp = method.invoke(this.obj, args) ;
  24.             return temp ;
  25.         }
  26. }

  27. package cyc.dl;
  28. public class DynaProxyDemo {    //测试类
  29. public static void main(String args[]){
  30.              MyInvocationHandler handler = new MyInvocationHandler() ;
  31.              Subject sub = (Subject)handler.bind(new RealSubject()) ;
  32.              String info = sub.say("阿菜", 21) ;
  33.              System.out.println(info);
  34.      }
  35. }
复制代码

代码虽然出来了,但是有些地方看不懂,帮忙解释一下??


作者: anqi    时间: 2014-4-21 22:15
本帖最后由 anqi 于 2014-4-21 22:22 编辑
  1. public class MyInvocationHandler implements InvocationHandler{ //这不是代理类
  2.     private Object obj;
  3.     public Object bind(Object obj){   //用一个方法绑定真实操作主体
  4.             this.obj = obj ;
  5.             return Proxy.newProxyInstance(obj.getClass().getClassLoader(), //指定其类加载器
  6.           obj.getClass().getInterfaces(), this);  //this代表MyInvocationHandler
  7.     }
  8.     public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
  9.             Object temp = method.invoke(this.obj, args) ;
  10.             return temp ;
  11.         }
  12. }
复制代码






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2