首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

怎么获得Java动态代理的代理类

2012-10-08 
如何获得Java动态代理的代理类JDK 代理生成器,在生成类是会根据参数“sun.misc.ProxyGenerator.saveGenerat

如何获得Java动态代理的代理类
JDK 代理生成器,在生成类是会根据参数“sun.misc.ProxyGenerator.saveGeneratedFiles”来决定是否将二进制保存到本地文件中,
具体的路径查看源码:
ProxyGenerator.access$000(this.val$name) + ".class"
根据access$000这个方法生成的路径来保存

在openjdk中这个access$000 是对应

private static String dotToSlash(String name) {
        return name.replace('.', '/');
}

所以文件是保存在

FileOutputStream localFileOutputStream = new FileOutputStream(ProxyGenerator.access$000(this.val$name) + ".class");

可以测试一下这个文件存放的具体路径:

FileOutputStream file = new FileOutputStream("$Proxy0" + ".class");

System.out.println(new File("$Proxy0" + ".class").getAbsolutePath());

这样在下面生成动态代理类的时候会将class文件保存

反编译class文件,可以看到有一个参数为InvocationHandler的构造方法,实现接口方法种的代码如下:

public final void printA()    throws   {    try    {      this.h.invoke(this, m3, null);      return;    }    catch (RuntimeException localRuntimeException)    {      throw localRuntimeException;    }    catch (Throwable localThrowable)    {    }    throw new UndeclaredThrowableException(localThrowable);  }


表明代理类只是做了一层封装,具体实现是在InvocationHandler中来做。



1 楼 daly1987 2011-12-18   很好的文章!

热点排行