黑马程序员技术交流社区
标题:
反射机制中动态代理代码错误???
[打印本页]
作者:
心?=忐§忑]
时间:
2014-4-21 21:57
标题:
反射机制中动态代理代码错误???
package cyc.dl;
public interface Subject { //定义接口
public String say(String name,int age ) ;
}
package cyc.dl;
public class RealSubject implements Subject { //实现接口
public String say(String name,int age){
return "姓名:" + name + "年龄:" + age ;
}
}
package cyc.dl;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyInvocationHandler implements InvocationHandler{ //代理类
private Object obj; //定义一个真实主体
public Object bind(Object obj){ //用一个方法绑定真实操作主体
this.obj = obj ;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), //类加载器 此语句什么作用,参数,this是啥
obj.getClass().getInterfaces(), this); //取得代理对象
}
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
Object temp = method.invoke(this.obj, args) ;
return temp ;
}
}
package cyc.dl;
public class DynaProxyDemo { //测试类
public static void main(String args[]){
MyInvocationHandler handler = new MyInvocationHandler() ;
Subject sub = (Subject)handler.bind(new RealSubject()) ;
String info = sub.say("阿菜", 21) ;
System.out.println(info);
}
}
复制代码
代码虽然出来了,但是有些地方看不懂,帮忙解释一下??
作者:
anqi
时间:
2014-4-21 22:15
本帖最后由 anqi 于 2014-4-21 22:22 编辑
public class MyInvocationHandler implements InvocationHandler{ //这不是代理类
private Object obj;
public Object bind(Object obj){ //用一个方法绑定真实操作主体
this.obj = obj ;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), //指定其类加载器
obj.getClass().getInterfaces(), this); //this代表MyInvocationHandler
}
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
Object temp = method.invoke(this.obj, args) ;
return temp ;
}
}
复制代码
Proxy才是代理 它利用newProxyInstance生成目标类的代理类,既然是生成了一个类,要加载进内存,所以要指定其类加载器一般指定和目标类一样的。obj.getClass().getClassLoader()
代理是类对多个有相同方法的类的代理 所以要获得它们的接口 obj.getClass().getInterfaces()
MyInvocationHandler是代理类的处理方法,一个代理类怎么知道如何处理目标类的方法啊?计算机不知道,所以要认为设定一个处理方法的类,你调用代理类的方法,实际是调用MyInvocationHandler的对应方法,所以你要给它指定一个InvocationHandler(建立其子类)
9KAYU{G1$F~C_@279E@@3$S.jpg
(125.96 KB, 下载次数: 2)
下载附件
2014-4-21 22:18 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2