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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 敷衍ゝ微笑掩盖 于 2014-7-2 10:27 编辑

Public void abc(){
Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class );
Constructor[] constructors = clazzProxy1.getConstructors();
For(Constructor constructor:constructors){
String name=constructor.getName();
StringBuilder sBuilder = new StringBuilder(name);
sBuilder.append(“(”);
Class[] clazzParams=constructor.getParameterTypes();
for(Class clazzParam:clazzParams){
sBuilder.append(clazzParam.getName()).get(‘,’);
}
sBuilder.deleteCharAt(sBuilder.length()-1);
sBuilder.append(“)”);
}
}
上面就能指定了一个接口,并没有指明为哪个类的代理啊,它怎么知道为哪个类的代理哟。那个是生成的动态类哟

1 个回复

倒序浏览
对于Proxy.getProxyClass是 返回代理类的 java.lang.Class 对象,并向其提供类加载器和接口数组。
而Proxy.newProxyInstance 才是返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
这是视频里实现一个实例类的代理:
Collection collection2 = (Collection) Proxy.newProxyInstance(
              Collection.class.getClassLoader(),
              new Class[] { Collection.class },
              new InvocationHandler() {
                             public Object invoke(Object proxy, Method method,  Object[] args) throws Throwable {
                                    ArrayList arrList = new ArrayList();
                                    long starTime = System.currentTimeMillis();
                                    Object arrListf = method.invoke(arrList, args);
                         System.out.println(method.getName() + "方法的运行时间: " + (System.currentTimeMillis() - starTime));
                      return arrListf;
                    }
           });
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马