如何获取设计模式中动态代理的字节码文件

本文介绍了如何保存Java动态代理(JDK Proxy)和CGLIB生成的字节码文件,以深入理解这两种动态代理机制。通过设置系统属性,可以将字节码文件保存到指定目录,便于分析。JDK动态代理基于接口实现,而CGLIB则通过继承委托类创建代理。保存下来的字节码文件显示了额外的方法如toString、hashCode和equals。
摘要由CSDN通过智能技术生成

目录

保存jdk动态代理的字节码文件

保存cglib的字节码文件


获取字节码文件的目的主要是为了解惑,知道jdk动态代理必须使用委托类接口接收,知道cglib动态代理可以使用委托类来接收,查看编译后的源码后才知道为什么,这就做到了一个知识的闭环。

默认的字节码文件并没有保存下来。

保存jdk动态代理的字节码文件

使用main方法来生成,因为main方法可以方便配置workingdirectory

执行main方法后会生成Application,main方法实际上就是一个应用程序,

 接下里配置这里:

 然后apply----ok

接下来把这几句放到jdk动态代理代码的前面

//将字节码文件保存下来
        //ProxyGenerator → saveGeneratedFiles
        System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles","true");

以上代码是一个ProxyGenerator类帮助保存的,类内部分截图如下

我们需要做的就是给字符串赋值true

接下来重新执行代码就会生成com.sun.proxy字节码文件

字节码文件内截图如下

 里面除了委托类中的方法,还有toString方法,hashCode、equals等方法,在代理类中存在着和委托类相同的方法,相同体现在方法名、形参、返回值

这个动态代理是继承了Proxy中的 protected InvocationHandler h;方法,然后调用它最终还是执行的invoke方法

保存cglib的字节码文件

    public static void main(String[] args) {
        //保存cglib字节码文件
        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,
                "D:\\WorkSpace\\j33_workspace\\codes\\day02-design-pattern\\demo5-cglib-dynamic-proxy");

好了,以上两种方法就实现了

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值