zoukankan      html  css  js  c++  java
  • 生成动态代理类文件

    前言

    刚开始知道动态代理的时候,总是觉得这些东西很神奇,神奇的感觉通常源于未知。这里介绍两个可以将生成的动态代理类写入硬盘生成文件的方法,方便一睹动态代理类的真容。

    jdk 动态代理

    在main方法中加入如下代码即可:

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

    会在项目的根目录下生成文件夹:com.sun.proxy

    有的同学加入了这个配置,有可能还是没有生成动态代理类文件。这个时候需要你打开 sun.misc.ProxyGenerator 这个类,找到 saveGeneratedFiles 这个属性,看看他取的是哪个系统属性。

    private static final boolean saveGeneratedFiles = (Boolean)AccessController.doPrivileged(new GetBooleanAction("sun.misc.ProxyGenerator.saveGeneratedFiles"));
    

    cglib 动态代理

    在main方法中加入如下代码:

    System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "E:\project\test\cglib");
    

    还有人提的一种方法:

        public static void main(String[] args) {
    
            byte[] bytes = ProxyGenerator.generateProxyClass("$Proxy0", new Class[]{ISubject.class});
    
            try {
                FileOutputStream fileOutputStream = new FileOutputStream("E:\project\test\manual_proxy\$Proxy0.class");
                fileOutputStream.write(bytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    

    这个其实就是jdk动态代理生成代理类文件调用的方法,需要注意的是 generateProxyClass() 方法的第二个参数需要是接口,不然你就会发现生成的代理类文件中会出现 $proxy implements 类,这显然是不能编译通过的。

  • 相关阅读:
    AJAX补充
    JQuery知识补充2
    JQuery知识补充1
    LiveBOS使用指南
    HTML5(1)
    .net 后台导出excel ,word
    Eval绑定方法:多条件绑定:
    repeater 的用法
    两个页面地址栏传值
    js取后台的值
  • 原文地址:https://www.cnblogs.com/lwmp/p/13940996.html
Copyright © 2011-2022 走看看