黑马程序员技术交流社区
标题:
代理的handler内部类问题
[打印本页]
作者:
H._张_♂
时间:
2014-4-2 19:00
标题:
代理的handler内部类问题
Collection proxy = (Collection)constructor.newInstance(new InvocationHandler(){
ArrayList target = new ArrayList();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("_________");
Object value = method.invoke(target,args);
System.out.println(target.toString());
return value;
}
});
复制代码
这段代码是代理的内部类写法,对于这一句应该怎么理解?
Object value = method.invoke(target,args);
这个invoke方法不是handler的吗?为什么这里是对method调用?
作者:
Engle
时间:
2014-4-2 19:29
Java动态代理类位于java.lang.reflect包下,一般主要
涉及到以下两个类:
(1)Interface InvocationHandler:该接口中仅定义了
一个方法
– public object invoke(Object obj,Method method,
Object[] args)
在实际使用时,第一个参数obj一般是指代理类,
method是被代理的方法,args
为该方法的参数数组。
这个抽象方法在代理类中动态实现。
你的这个方法 Object value = method.invoke(target,args);
调用的不是hander的invoke();方法。
而是Method类中的invoke,通过反射的方式调用你的被代理类要执行的方法。
作者:
ehuashao
时间:
2014-4-2 19:33
invoke()方法是反射类Method的一个方法,给你段代码看看:
Method methodCharAt = String.class.getMethod("charAt", int.class);
methodCharAt.invoke(str, 1));
复制代码
第一句代码通过反射得到String类的charAt()方法,第二句代码通过用Method的对象来调用invoke()方法,实质上相当于这句代码str.charAt(1)的调用。
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("_________");
Object value = method.invoke(target,args);
System.out.println(target.toString());
return value;
}
复制代码
你的这段代码,传进来一个method对象,一个object数组args[];的作用是来调用那个被反射到method对象的方法。
作者:
syusikoku
时间:
2014-4-2 21:07
这里不一样哦。这里是说要把传递过来的方法作用到哪个代码对象身上。并且这个方法在执行的时候的参数是什么。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2