疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

保存Java代理框架生成的类文件


 

     Java的代理框架经常接触,但实际中我们看不到运行时生成的代理类,使用的代理框架是默认不会保存,如果想要查看,需要显式打开开关,可以通过以下2段代码做到。

  1、Java动态代理。让下面代码在代理类执行前执行,然后刷新项目,在其根目录下可以看到形如"$Proxy0.class" 文件,再使用反编译工具解析即可。

  /**

  * 设置保存Java动态代理生成的类文件。

  *

  * @throws Exception

  */

  public static void saveGeneratedJdkProxyFiles() throws Exception {

  Field field = System.class.getDeclaredField("props");

  field.setAccessible(true);

  Properties props = (Properties) field.get(null);

  props.put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

  }

  2、Cglib代理。让下面代码在代理类执行前执行,然后刷新项目,在指定目录dir下可以看到形如 "类名$$EnhancerByCGLIB$$数字.class" 文件,再使用反编译工具解析即可。

  /**

  * 设置保存Cglib代理生成的类文件。

  *

  * @throws Exception

  */

  public static void saveGeneratedCGlibProxyFiles() throws Exception {

  Field field = System.class.getDeclaredField("props");

  field.setAccessible(true);

  Properties props = (Properties) field.get(null);

  System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, dir);//dir为保存文件路径

  props.put("net.sf.cglib.core.DebuggingClassWriter.traceEnabled", "true");

  }