• 生成动态代理类文件


    前言

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

    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 类,这显然是不能编译通过的。

  • 相关阅读:
    jquery easy ui 1.3.4 窗口,对话框,提示框(5)
    jquery easy ui 1.3.4 布局layout(4)
    4.1 avd
    android sdk 安装排错
    推荐一个非常COOL的开源相册程序!
    JQuery LazyLoad实现图片延迟加载-探究
    Js和asp.net各自设置的cookie相互读取的方法
    js html5推送 实例
    给网页添加[回到顶部]和[去底部]功能
    Session赋值(备注)
  • 原文地址:https://www.cnblogs.com/lwmp/p/13940996.html
Copyright © 2020-2023  润新知