将JDK动态代理生成的类保存为 .class文件

Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比 E3D在行业内以展示效果好,入门阶段易学易用人机界面友好,电控仿真连接方便不需要借助其他第三方软件,E3D平台开放度较高用户DIY程度强,数据分析功能针对要评定对象的KPI的可根据项目或者使用者需求进行评定。3.支持导入导出多种格式的文件,比如dwg、dxf、fbx、obj、3ds、step、stp、iges、skp、stl、wrl、 bmp 等等。3.软件自带模型组件库程序代码开放,用户可以引用、修改、拷贝,按照自己的逻辑修改模型,或者创建模型并保存到组件库与别人共享。3. 支持导出布局图片。 阅读详情


如果我们要研究JDK动态生成的代理类,此时则需要将内存中的代理类作为.class文件保存到磁盘,再通过Java反编译工具查看其源码

(方式一)设置系统属性

在调用newProxyInstance之前将sun.misc.ProxyGenerator.saveGeneratedFiles系统属性设置为true,生成的代理类将被自动写入磁盘;class文件在 \Workspaces\项目名称\com\sun\proxy 路径下

	public Object getProxy() {
		System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); //设置系统属性
		return Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), this); 
	}

(方式二)保存ProxyGenerator生成的字节流数组

直接通过ProxyGenerator的静态方法generateProxyClass(JDK源码中 P r o x y . n e w P r o x y I n s t a n c e \color{blue}{Proxy.newProxyInstance} Proxy.newProxyInstance实际就是调用 P r o x y G e n e r a t o r . g e n e r a t e P r o x y C l a s s \color{blue}{ProxyGenerator.generateProxyClass} ProxyGenerator.generateProxyClass方法生成的class对应的字节数组)生成代理类的字节数组表示,再通过IO流写到磁盘

代理类的class文件在 \Workspaces\项目名称\bin\目标类所在的包 路径下

	public Object getProxy() {		
		saveClassFile(target.getClass(),"AtmProxy");//调用保存为class字节码文件
		return Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), this); 
	}
	/**
	 * 保存class文件
	 * @param clazz	      class对象
	 * @param proxyName	  代理类的名字,可随意指定	
	 * @param classBytes
	 */
	public void saveClassFile(Class clazz,String proxyName) {
	    //生成class的字节数组,此处生成的class与proxy.newProxyInstance中生成的class除了代理类的名字不同,其它内容完全一致
		byte[] classFile = ProxyGenerator.generateProxyClass(proxyName, clazz.getInterfaces());
		String path = clazz.getResource(".").getPath();
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(path + proxyName + ".class");
			fos.write(classFile);//保存到磁盘
			fos.flush();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}

类导入问题处理

如果出现Access restriction: The type ‘ProxyGenerator’ is not API (restriction on required library ‘C:\Program Files\Java\jre1.8.0_72\lib\rt.jar’)问题
在这里插入图片描述

import sun.misc.ProxyGenerator;

语句无效,会导致 ProxyGenerator  cannot be resolved 错误;

原因是 P r o x y G e n e r a t o r \color{blue}{ProxyGenerator} ProxyGenerator 不属于JDK API的内容,默认不给导入

解 决 方 法 \color{blue}解决方法 解决方法:
1.选中工程右键 -> Properties
2.Java build path -> libraries -> JRE System Library
3.点击右侧靠下方Edit
4.选择默认的JRE环境,Workspace default JRE; 或者选择Alternate JRE ->Installed JREs 导入JRE的目录环境

JDK动态代理完整代码

JDK动态代理完整代码请参考专题内容:https://blog.youkuaiyun.com/write6/article/details/89719646#font_size4JDKfont_48

Codex CLI 手机号验证失败?5 种接码平台实测对比与绕过地区限制的 3 步操作 揭示 Codex CLI 手机号验证失败的真实原因在于上下文污染而非网络问题,分析其通过 ASN、Accept-Language 和 TLS SNI 三重加权风控的机制,并实测对比 5 种接码平台在 DNS 解析路径、ASN 干净度和复用间隔上的差异,提出剥离浏览器指纹、固化 TLS SNI、隔离 阅读详情

相关推荐

PCB设计必看:铜皮厚度与载流量的黄金比例(附实用对照表)

本文深入探讨了PCB设计中铜皮厚度与载流量的关键关系,提供了实用的对照表和设计技巧。通过分析基础原理、标准选择策略及常见误区,帮助工程师优化PCB设计,确保电路板的可靠性和安全性。特别适用于需要处理大电流或高频应用的电子设计场景。

milk8的博客 510

jdk 动态代理显示代理类(保存代理生成的class文件)

System.getProperties().put(“jdk.proxy.ProxyGenerator.saveGeneratedFiles”,“true”);

weixin_43175427的博客 474

车载以太网入坑指南,从小白到懂哥的进阶之路【技术分享】

各位技术大佬们好!最近公司项目涉及到车载以太网,刚开始完全懵逼,花了大半个月时间各种查资料、测试设备,总算是摸清了门道。想着互联网上卧虎藏龙,肯定有不少大佬对这个技术感兴趣,所以写个帖子分享一下,顺便求各位大佬指点。

starelink的博客 1260

java动态代理保存代理生成的class文件

一 配置方式 以下两种方式都可以: 1. 配置jvm启动参数 -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true idea配置如下: Edit Configurations-->Vm options 输入框配置 -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true 如图: 2. 在代码的启动入口加入如下代码: System.getProperties().put("sun.misc.

flyfelu的博客 1636

DSP TMS320F280049之CCS工程的建立(库函数版)

TMS320F280049 DSP是TI最新出的一款C2000系列的DSP,主频为100MHZ,功能较为强大,具有较多的片上模拟外设。这一节主要讲述如何新建F280049的CCS工程。 Step1.下载文件: 下载C2000Ware软件并安装。下载地址如下: http://www.ti.com.cn/tool/cn/C2000WARE?keyMatch=C2000Ware%2...

fanxianyan1993的博客 1万+

告别手动标注!用ENVI Classic高效搞定高光谱图像语义分割标签(以农业/地物分类为例)

本文详细介绍了如何利用ENVI Classic实现高光谱图像的半自动化智能标注,特别针对农业和地物分类场景。通过光谱特征分析、智能标注技巧和MAT文件转换,显著提升标注效率和质量,助力AI模型训练。

weixin_28694169的博客 251

java保存动态代理生成的类的class文件

启动时加: -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true

qq_31024823的博客 2013

questasim的傻瓜式安装与仿真教程

一、安装 1、下载软件 链接:https://pan.baidu.com/s/1S05AnO_w-wy6RsAj_kdUXg 提取码:p2nt 2、根据电脑类型是32位还是64位,解压不同安装包。 解压得: 2、运行.exe文件,出现: 问题及解决办法: 这是杀毒软件造成的,因此在安装过程中关闭杀毒软件即可。关闭之后,再次运行.exe文件。 3、点击下一步,进入选择安装位置界面,如下:选择好安装位置后点击下一步。 4、点击同意 5、接下来等待安装结束即可,在安装过程中,会跳出来弹框,询问是否要添

树下等苹果的博客 3万+

jdk动态代理实现原理

动态代理的作用    我们都知道,spring的面向切面编程默认由jdk动态代理和cglib动态代理实现,使用动态代理我们可以无侵入的实现切面编程,比如日志管理、权限管理、事务管理等。jdk动态代理是面向接口的,cglib是面向普通类。弄明白了这两种动态代理实现原理也就懂了spring的aop编程。 jdk动态代理说明 jdk动态代理是面向接口的,只能对接口生成代理类。我曾经以为这个

wangjun5159的专栏 959

【AI编程】Trae 环境搭建与配置从使用到项目实战详解

Trae 环境搭建与配置从使用到项目实战详解

congge 5650

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2397

将JDK动态代理生成的类保存为 .class文件System.setProperty(“sun.misc.ProxyGenerator.saveGeneratedFiles“, “true“)无效

将JDK动态代理生成的类保存为 .class文件System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");无效,没有看到相应的字节码文件,这是因为System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");为jdk8版本及之前的设置。 文章目录1.jdk8及之前的设置:2.jdk8之后的设置:3.如何知道是jdk.proxy.Proxy

MrYushiwen的博客 4361

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

JDK动态代理生成的类,如何保存为.class文件?

你是否曾想深入了解Java中的动态代理机制?是否好奇JDK动态代理生成的类是如何工作的?现在,让我们一起揭开它的神秘面纱!

LA1245780的博客 897

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【设计模式】将JDK动态代理生成的类保存为 .class文件

jdk8及之前:System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); jdk8之后:System.setProperty("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");

皇夜_的博客 1554

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

动态代理如何获取动态生成的代理类的class文件

在使用JDK动态代理,即reflect包下的Proxy类的newProxyInstance方法时,会在运行时,根据传进来的接口类型动态生成class字节码文件。这个字节码文件是在内存中动态获取的,程序结束就没有了,如何动态获取呢。打开进入sun proxy,会发现程序运行过程中临时生成的class文件已经保存到本地。在程序开始运行前设置这个属性,运行程序,在项目的根目录下有一个com文件夹。现在可以使用反编译工具进行查看了。

qq_43539664的博客 557

JDK动态代理生成的class文件保存到本地失败问题(sun.misc.ProxyGenerator.saveGeneratedFiles)

将JDK动态代理生成的class文件保存到本地,网上搜到的办法是加入: System.getProperties().put(""sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); 发现实际并未生效,先给答案,新版本JDK改为: System.getProperties().put("jdk.proxy.ProxyGenerator...

zyq8514700的博客 9814

cglib动态代理和jdk动态代理的区别

jdk动态代理和cglib动态代理执行时都会生成行的calss文件,jdk生成一个,cglib会生成三个 Jdk动态代理生成一个文件继承proxy类实现代理接口,因为java不能多继承的特性,所以只能代理接口 publicfinalclassProxy0 extendsProxy implementsCarService 通过反射获取接口里面的方法,用invoke方法执行接口里面的方法 m1...m5 上图图中的m3就是接口中的makeCar()接口 ...

qq_38763885的博客 383

JDK动态代理,获取动态生成的代理类的class文件

1、定义一个接口 public interface IHandlerInterface { public void test(); } 2、定义实现类 public class RealHandlerInterface implements IHandlerInterface { @Override public void test() { ServiLogger.log("RealHandlerInterface: test");

【欢迎关注公众号:冬瓜白】 2004

快速查看java动态生成class内容的方法

在阅读框架代码的时候,我们经常碰到自动生成的class类,例如jdk中动态代理类、cglib代理类、spring AOP代理以及method.invoke()方法中自动生成的类GeneratedMethodAccessor1、以及lambda表达式等等。其中jdk、cglib以及lamb解析中都会提供一个系统配置,在生成代理类的时候,会将类的字节码写入到项目文件夹的文件中。例如: jdk中生成动...

wenyuan65的博客 2315

反编译看JDK的动态代理原理

今天通过设置特殊参数轻松理解动态代理……

IT乐知 676

设计模式 -(11)动态代理(Dynamic Proxy)

设计模式 -(11)动态代理(Dynamic Proxy) 动态代理是 静态代理 的升级,通过静态代理我们可以对某一个接口的功能进行扩展,而动态代理可以对任意接口进行扩展 如何使用JDK动态代理 如下是使用JDK动态代理对 Programmer 对象生成代理对象的过程,具体通过 java.lang.reflect.Proxy 类生成代理类 package com.example.dp._11dynamicproxy; import com.example.dp._10staticproxy._02.Pr

sql2008help的博客 237

Java-JDK动态代理实现原理

文章目录JDK动态代理使用实例JDK动态代理实现原理分析Proxy.newProxyInstance()getProxyClass0()ProxyClassFactory.apply()ProxyGenerator.generateProxyClass()生成的代理对象的.class文件 JDK动态代理使用实例 代理模式的类图如上。关于静态代理的示例网上有很多,在这里就不讲了。 因为本篇讲述要点...

憧憬的专栏 515

代理设计模式-动态代理-JDK

1、概念 “动态代理是指代理类对象在程序运行时由JVM根据反射机制动态生成的。动态代理不需要定义代理类的,java源文件。 动态代理其实就是jdk运行期间,动态创建class字节码并加载到JVM。” 2、实例 public interface SmsService { String send(String message); } public class SmsServiceImpl implements SmsService { public SmsService

我是谁 172

spring_动态代理

下载动态代理生成的类并保存到本地的几种方法: 1. 修改代码,设置属性: System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, “D:\class”); –该设置用于输出cglib动态代理产生的类 System.getProperties().put(“sun.misc.ProxyGenerator.saveGen...

StayHungry 410

代理模式-JDK动态代理

代理模式-JDK动态代理

Leon_Jinhai_Sun的博客 154

浅析基于JDK实现的动态代理

intf//此处校验class,省略...}//代理类的包名//验证所有非公共代理接口都在同一个包中>intfif(!""}}}}////代理类的全限定类名//生成class文件流try{//通过类文件创建Class对象,这是一个本地方法(C/C++实现),无法查看}}复制代码。...

weixin_72753070的博客 138
上一篇: Eclipse 部署项目到Tomcat 详细步骤
下一篇: Java动态代理与CGLIB动态代理实现原理
子澈课堂
博客等级 码龄21年 2万+粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值