A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 早知道 中级黑马   /  2013-9-12 13:09  /  1650 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 早知道 于 2013-9-20 20:15 编辑

代码如下:
public class MyInvocationHandler implements InvocationHandler {
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();
  long useTime = endTime-beginTime;
  System.out.println(method.getName()+"time:"+useTime);
  return retVal;
}
}

Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);
  Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
//  Constructor constructor = clazzProxy1.getClass().getConstructor(InvocationHandler.class);发现用这个方法的话会报错求解
  Collection proxy1 = (Collection) constructor.newInstance(new MyInvocationHandler());
  System.out.println(proxy1.getClass().getName());//不明白为什么不经过InvocationHandler的invoke方法

上面的报错提示:Exception in thread "main" java.lang.NoSuchMethodException: java.lang.Class.<init>(java.lang.reflect.InvocationHandler)

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

2 个回复

倒序浏览
//  Constructor constructor = clazzProxy1.getClass().getConstructor(InvocationHandler.class);发现用这个方法的话会报错求解
说一说我的理解,希望对你有所帮助。
这句代码的意思你知道吗?clazzProxy1.getClass()获取的是字节码。
那么反射得到字节码的其他2种形式你知道吗?
1.类名.class
2.对象.getClass()
3.Class.forName(类名)
那么获得的是谁的字节码呢?获得的是类的字节码。
clazzProxy1.getClass()这段话你有重新获得了一个新的Proxy类的字节码。
所以说肯定会报错。
下面代码出现的错误,我想就不用多说了吧。
个人观点,大家还有什么观点请提出来。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
//  Constructor constructor = clazzProxy1.getClass().getConstructor(InvocationHandler.class);发现用这个方法的话会报错求解

这句话的意思是获取clasProxy1的构造方法,该构造方法必须是一个带参数的构造方法,其参数是class字节码。这里报错的原因是classProxy1这个类中没有提供这样的构造函数,所以错了。

这是通过反射的方式获取构造函数,其实不管是反射还是直接创建对象,都是一样的结果。都需要对应的构造函数。


希望对你有所帮助!

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马