专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

jdk 动态proxy持久化为.class文件方式草集

proxy动态代理持久化意义

jdk本身的动态代理技术得到了广泛的应用,如:mybatis mapper,spring cloud openFeign。那么我们在研究分析这个源码的时候,由于生成的动态代理类是在内存中的,致使我们无法看到.class的面目,增加了我们查看源码,分析原理,学习技术的难度。而对java和spring来说,都开了口子,通过设置环境变量来生成.class。

直接上配置方式

方式一:-D环境变量设置

## java动态代理持久化为.class文件配置方式
-Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

## cglib动态代理持久化为.class文件配置方式
-Dcglib.debugLocation=/Users/xxx

通过idea配置的话,方式如下图

70_1.png

70_2.png

方式二:main方法配置

## java动态代理持久化为.class文件配置方式
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

## cglib动态代理持久化为.class文件配置方式
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Users/xxx");

实践过程中,发现main方法配置方式中的java动态代理持久化为.class不起作用,原因还不明。

总结

个人觉得,通过-D环境变量设置更方便,无侵入性。如果你要看spring bootconstrollerservice等生成的代理class,因为他们是spring bootcglib方式生成的,所以配置上cglib动态代理;如果你要看@Mapper@FeignClient生成的代理class,因为他们是jdk方式生成的,所以配置上java动态代理

效果

配置好,启动项目后,动态代理持久化为.class文件会在项目目录下生成

70_3.png

我是spring boot项目,添加了spring-boot-actuator监控组件包,所以可以通过EndPoint功能查看刚配置的环境变量

$ curl -X GET 'http://localhost:8080/env'

{
    name: "systemProperties",
    properties: {
        ... ...
        sun.misc.ProxyGenerator.saveGeneratedFiles:{
            value: "true"
        }   
    }
}

70_4.png

未经允许不得转载:搜云库技术团队 » jdk 动态proxy持久化为.class文件方式草集

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们