黑马程序员技术交流社区
标题:
动态代理问题
[打印本页]
作者:
一个铃,一颗珠
时间:
2013-8-22 23:16
标题:
动态代理问题
本帖最后由 一个铃,一颗珠 于 2013-8-22 23:18 编辑
动态代理中implements InvocationHandler接口有
invoke方法,这个方法中Object proxy变量在这个方法没有调用,这个Object proxy变量是起什么作用的?
public
Object invoke(Object proxy, Method method, Object[] args)
throws
Throwable {
29
Object result =
null
;
30
//
调用之前
31
doBefore();
32
//
调用原始对象的方法
33
result=method.invoke(obj, args);
34
//
调用之后
35
doAfter();
36
return
result;
37
}
作者:
xuluheng718
时间:
2013-8-23 00:16
Object proxy是当前代理的对象,比如说要代理ArrayList,那么就需要产生一个代理对象,该代理对象里面实现的都是些Colection接口里面的方法,而这些方法里面执行的是Collection的实现类ArrayList里面的同名方法。还不明白的话,就把他看成是代理商吧。
作者:
code_geass
时间:
2013-8-27 12:13
通告代理引用。。具体用处。。为了查看方便?
作者:
肥猫
时间:
2013-8-27 12:59
proxy调用的方法只返回一个实例,该实例需要作为代理对象去关联目标类,准确的说是关联目标类所实现的那个接口,所以在Invocationhandler的实现类中的invoke方法内不需要调用,只需要将调用INVOKE方法的对象作为参数传递给生成实例的方法就行。
作者:
binghaiwang
时间:
2013-8-27 13:19
ArrayList target = new ArrayList();
@Override
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
// TODO Auto-generated method stub
long beginTime = System.currentTimeMillis();
Object retVal = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName() + "运行时间:"
复制代码
例如我上边的部分代码。假如我要调用
ArrayList 中的add方法 代理类中调用表现为
proxy.add("abc"),
Object proxy这个参数只是代表了代理类来关联
ArrayList
中的add方法,说白了就是起到一个关联作用,让
invoke方法知道是由哪个代理类来实现方法的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2