动态代理中生成的代理类的字节码进行反编译后的类代码

Java 动态代理为啥需要接口??? 我们通过查看源码newProxyInstance方法的实现: public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, ... 阅读详情
public final class $Proxy0 extends Proxy implements HelloService {
    private static Method m1; //equals()方法
    private static Method m3; //Bingo 我们的sayHello方法()
    private static Method m2; //toString()方法
    private static Method m0; //hashCode()方法
    
    //这里就是我们之前提交的InvocationHandler这个构造方法!!
    public $Proxy0(InvocationHandler var1) throws  {
        super(var1);
    }

    public final boolean equals(Object var1) throws  {
        try {
            return ((Boolean)super.h.invoke(this, m1, new Object[]{var1})).booleanValue();
        } catch (RuntimeException | Error var3) {
            throw var3;
        } catch (Throwable var4) {
            throw new UndeclaredThrowableException(var4);
        }
    }

    //勇士来吧!看一看我们的代理类的sayHello()方法长什么样子呀!!
    public final void sayHello() throws  {
        try {
            super.h.invoke(this, m3, (Object[])null);
        } catch (RuntimeException | Error var2) {
            throw var2;
        } catch (Throwable var3) {
            throw new UndeclaredThrowableException(var3);
        }
    }

    public final String toString() throws  {
        try {
            return (String)super.h.invoke(this, m2, (Object[])null);
        } catch (RuntimeException | Error var2) {
            throw var2;
        } catch (Throwable var3) {
            throw new UndeclaredThrowableException(var3);
        }
    }

    public final int hashCode() throws  {
        try {
            return ((Integer)super.h.invoke(this, m0, (Object[])null)).intValue();
        } catch (RuntimeException | Error var2) {
            throw var2;
        } catch (Throwable var3) {
            throw new UndeclaredThrowableException(var3);
        }
    }

    static {
        try {
            m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[]{Class.forName("java.lang.Object")});
            m3 = Class.forName("proxy.service.HelloService").getMethod("sayHello", new Class[0]);
            m2 = Class.forName("java.lang.Object").getMethod("toString", new Class[0]);
            m0 = Class.forName("java.lang.Object").getMethod("hashCode", new Class[0]);
        } catch (NoSuchMethodException var2) {
            throw new NoSuchMethodError(var2.getMessage());
        } catch (ClassNotFoundException var3) {
            throw new NoClassDefFoundError(var3.getMessage());
        }
    }
}

https://juejin.im/post/5caa2682e51d452b56319e37

spring-aop。以及把代理类 文件输出 jdk 1.8 环境,1.8 之下的环境应该也可以运行 这些代码,然后 需要导入 jre 下面的 rt.jar 包,这个自己去找下 立即下载

相关推荐

银河麒麟V10系统grub崩溃急救指南:从光盘救援到完整恢复(附常见错误排查)

本文详细介绍了银河麒麟V10系统grub崩溃的急救方法,从使用安装光盘进入救援环境到完整恢复系统的全流程。针对不同损坏程度(轻度、中度、严重)提供了分级恢复策略,包括grub2-install和grub2-mkconfig等关键命令的使用,并附有常见错误排查表,帮助用户快速解决引导问题。

weixin_30955617的博客 483

Cglib动态代理反编译生成类

JDK的反编译较为简单,看本机源代码 1.下面是代理类和真实类的源代码 package Cglib第三方代理; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy...

qq_27378875的博客 3235

FortiGate-60E防火墙忘记密码?用Console线+TFTP重装固件v7.0.9全流程

本文详细介绍了当FortiGate-60E防火墙忘记密码且物理重置无效时,如何通过Console线连接并利用TFTP服务器重装固件(如v7.0.9)的全流程。从恢复原理、工具准备、网络配置到逐步执行命令,提供了完整的实战指南,帮助管理员彻底恢复设备出厂设置并重置密码。

snow3的博客 332

Jad工具反编译JDK动态代理

一JDK动态代理生成对象的步骤 1获取被代理对象的引用,并且获取它的所有接口,反射获取。 2JDK动态代理类生成一个新的类,同时新的类要实现被代理类实现的所有接口。 3动态生成Java代码,新加的业务逻辑方法由一定的逻辑代码调用(在代码中体现)。 4编译新生成的Java代码的.class 5重新加载到JVM中运行。 二测试代码 https://gitee.com/cak...

实践求真知 774

企业数字化转型的理论指南:构建未来企业的关键策略与实践路径

数字化转型已经成为当今企业发展和市场竞争的核心驱动力,而在这一过程中,企业架构(EA)发挥着至关重要的作用。这本白皮书《世界级企业架构:建立和发展EA能力的领导者方法》提供了深入的理论指导,为企业如何通过企业架构实现有效的数字化转型提供了清晰的路径。本篇文章将从,解读该书的核心内容,揭示企业在数字化转型过程中应该如何通过EA的构建和实施,驱动组织变革与技术创新。

AZone架构院的博客 3172

WinCC与施耐德PLC的Modbus TCP通信实战指南

本文详细解析了西门子WinCC与施耐德PLC通过Modbus TCP协议实现通信的完整实战流程。内容涵盖硬件网络配置、Modbus地址映射核心规则、WinCC驱动连接建立、变量创建及高级数据访问技巧,并提供了常见故障排查思路,帮助工程师高效解决跨品牌设备通信难题。

weixin_29194693的博客 997

查看JDK动态代理生成的类的内容

首先我们先定义一个接口: public interface PersonInter { String test(String str); }接着就是我们想的要生成的JDK代理类源码的代码: public class JdkProxySourceClass { public static void writeClassToDisk(String path){ byte[] c

398701344努力加油! 7444

Fortran基础编程(3)——格式化输出

本篇推文将进一步讲解Fortran基础语法中格式化输出与声明部分,让我们的代码更加美观起来吧~

qq_45715554的博客 3826

反编译.class字节码文件的步骤

介绍三种反编译方式 文章目录反编译存在于磁盘中的java文件一、使用javac命令二、使用反编译工具 jd-gui 对字节码文件进行反编译使用阿里开源 Arthas 工具对运行中的类进行反编译一、下载对应的工具二、解压Arthas的jar包三、选择需要反编译的类四、运行结果五、使用jad命令反编译六、成功反编译反编译 CGLIB动态代理 生成的字节码文件一、获取代理类的main方法的第一行输入如下代码进行执行二、发现生成了对应的三个字节码文件三、使用反编译工具 jd-gui 对字节码文件进行反编译 反编译存

立志成为一个前端、后端、测试全方位发展的程序员 1299

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 176

【一看就会】Autoware.universe中静态绕障路线的生成逻辑

在路径行为规划中,前期根据地图和起点终点,生成了一组连续可行的路径段序列(lanelets),然后后续路径行为规划,又会进行起始点,终止点,避障绕障路径的路径规划,并且会调用route_handler中的函数,进行中心线生成,最后生成路径,后续再给速度行为规划进行速度规划。在autoware.universe的规划中,是基于规则的规划,而其中的规则又是为了解决不同场景的。而这些场景,大部分是为了解决路上障碍物(静态、动态、行人、车辆等等)。

weixin_48386130的博客 321

反编译spring aop动态代理生成的class

用到的工具 arthas 工具快速入门:https://arthas.aliyun.com/doc/quick-start.html 详细步骤 C:\Users\uniz>cd /d D:\Users\uniz\Desktop\temp D:\Users\uniz\Desktop\temp>java -jar arthas-boot.jar [INFO] arthas-boot version: 3.5.3 [INFO] Found existing java process, pleas.

zhouxzcsdn的博客 997

基于MUSIC算法的DOA估计Matlab仿真

特别需要指出的是:通道与阵元并不是一一对应,通道是由空间的一个、几个或所有阵元合成的,当然空间某个特定的阵元可包含在不同的通道内。空间谱估计侧重于研究空间多传感器阵列所构成的处理系统对感兴趣的空间信号的多种参数进行准确估计的能力,其主要目的是估计信号的空域参数或信源位置,这也是雷达、通信、声纳等许多领域的重要任务之一。从系统框图中可以清晰的看出,估计空间相当于是对目标空间的一个重构过程,这个重构的精度由众多因素决定,如环境的复杂性、空间阵元的互耦、通道不一致、频带不一致等。

FPGA/MATLAB学习教程/源码/项目合作开发 1747

查看动态代理生成的$Proxy0...类的代码

    在java动态代理时,会动态生成代理类,命名为"$Proxy+数字",很想知道这个动态代理类的细节。于是想反编译这个类,笨拙一点只为记录。     Proxy类getProxyClass方法中,会先查找缓存,如果未找到则会新生成Class。于是在类生成位置 proxyClass = defineClass0(loader, proxyName, proxyClassFile, 0, pr...

ququjiulai 867

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JAVA设计模式--代理模式(动态)(二)

深入理解Java Proxy机制一、前章回顾 在前一章“《学习笔记》之JAVA设计模式--代理模式(动态)(一)”中我们分别使用JDK自带的动态代理和CGLIB动态代理为数据库增加了日志记录功能。然而,生成的动态代理类到底是个什么样子呢?本章我们就一起来揭开它的庐山真面目。二、深入剖析JAVA动态代理类 我们先来看看生成的动态代理类是什么类型,对前一章第二节中示例的客户端进行如下简单修改,将生成的...

大佬请赐教 189

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java基础-Cglib动态代理

摘自OSCHINA(开源中国)的介绍:CGLib (Code Generation Library) 是一个强大的、高性能、高质量的 Code 生成类库。它可以在运行期扩展 Java 类与实现 Java 接口。Hibernate 用它来实现 PO 字节码的动态生成。CGLib 比 Java 的 java.lang.reflect.Proxy 类更强的在于它不仅可以接管接口类的方法,还可以接管普通类的方法。CGLib 的底层是 Java 字节码操作框架 —— ASM。

软件测试入门笔记 1612

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 动态代理机制简单理解

  Spring有两个核心的思想,一个是IOC,另一个就是AOP,而这个AOP就是建立在JAVA动态代理基础上的,下面先用一个简单的示例来说明动态代理的用法,然后简单叙述动态代理实现的原理。 一、示例 实现代理有四个步骤 1、创建一个接口 public interface Login { void validate(); void login(); } 2、...

weixin_30374009的博客 150

jdk与cglib代理源码分析

代理模式类图 jdk代理 测试代码 public interface Calculator { int add(int i, int j); int sub(int i, int j); int mult(int i, int j); int div(int i, int j); } public static void main(String[] args) { //保存生成的代理类的字节码文件 System.getProperties().put

qq_34508007的博客 317

jdk动态代理实现原理

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

wangjun5159的专栏 959

【干货】JDK动态代理的实现原理以及如何手写一个JDK动态代理

动态代理 代理模式是设计模式中非常重要的一种类型,而设计模式又是编程中非常重要的知识点,特别是在业务系统的重构中,更是有举足轻重的地位。代理模式从类型上来说,可以分为静态代理和动态代理两种类型。 在解释动态代理之前我们先理解一下静态代理: 首先你要明白静态代理的作用 我们有一个字体提供类,有多种实现(从磁盘,从网络,从系统) public...

weixin_33919941的博客 93

查看动态代理生成的代理类字节码

文章目录动态代理的知识介绍用java proxy实现动态代理查看生成的class代理类字节码创建代理的源码 动态代理的知识介绍 一、动态代理和Class字节码的关系 动态代理有什么作用及应用场景?   1.日志集中打印   2.事务   3.权限管理   4.AOP 在Spring Aop当中可以哪些方式实现,及区别?   l.java Proxy(动态构建字节码)(动态构建全新字节码bean初始化的时候)   2.cglib(动态构建字节码)(动态构建全新字节码bean初始化的时候)   3.Aspect

qq_41358574的博客 2173

cglib动态代理

CGLIB(Code Generation Library),是一个强大的,高性能,高质量的 Code 生成类库,它可以在运行期扩展 Java 类与实现 Java 接口。

NCS123456的博客 1万+

Java查看动态代理生成的字节码文件

很多小伙伴们可能在学习动态代理的时候,表示看不到JDK动态代理生成的代理类的字节码文件,表示很多理论无法去证实,所以今天给各位小伙伴们带来一个方法查看。 public static void buildProxy() throws IOException { // 填写需要动态代理的接口 byte[] bytes = ProxyGenerator.generateProxyClass("$proxy",new Class[]{Liha.class}); // 我这里是

李哈zzz的博客 1474

面试官:你说你懂动态代理,那你知道为什么JDK中的代理类都要继承Proxy吗?

之前我已经写过了关于动态代理的两篇文章,本来以为这块应该没啥问题,没想到今天又被难住了… 太难了!!! 之前文章的链接: 动态代理学习(一)自己动手模拟JDK动态代理、 动态代理学习(二)JDK动态代理源码分析 ...

做一个认真的程序员 3906

如何获取JDK Proxy动态代理生成的代理类源代码

本文介绍了在Java中,如何获取JDK Proxy动态代理生成的代理类源代码,并分析源代码内容,加深对Java代理类的实现原理和运行逻辑的理解

大数据开发、JAVA开发、人工智能AI 1050

保存java 动态代理生成的字节码文件

保存java 动态代理生成的字节码文件 在Java中,常用的动态代理技术有JDK的动态代理和cglib动态代理,不管是什么动态代理,最后都要动态的生成对应的.class,正常情况下,这个字节码文件并不会保存到本地,只会存在于内存之中。好奇心的驱使之下,决定以探其庐山真面目。经过查阅资料,自己觉得比较好用的两种方案,都在下面了。 1. 方案一:运行 sun.jvm.hotspot.HSDB 通...

qq_29956725的博客 2042
上一篇: dubbo+zookeeper的疑问
下一篇: 小知识积累中...
雨冰
博客等级 码龄15年 18粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值