`
ququjiulai
  • 浏览: 1368 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

    在java动态代理时,会动态生成代理类,命名为"$Proxy+数字",很想知道这个动态代理类的细节。于是想反编译这个类,笨拙一点只为记录。

    Proxy类getProxyClass方法中,会先查找缓存,如果未找到则会新生成Class。于是在类生成位置 proxyClass = defineClass0(loader, proxyName, proxyClassFile, 0, proxyClassFile.length);这段代码前,将ProxyGenerator生成的byte[]输出到文件中。开始动手改造。。

    首先,新建项目将jdk的src导入工程中,在原版Proxy类中加入之前所说的代码,目的是为了输出至文件以展示细节。之后编译Proxy.java文件,eclipse中如果没有设置自动构建可以手动clean一下。这里用到Jad.exe,可以看到刚才编译的Proxy.class文件已经改变了内容。接下来替换\jdk\jre\lib\rt.jar中的class。用Winrar浏览rt.jar,找到proxy.class用刚才编译好的新class替换。最后找到生成的文件outPut.java(名字随便.java就行,用于jad反编译),文件内容为byte流,用指令jad outPut.java可以生成$Proxy0.jad,打完收工。。

  注意实验前备份好原始文件。。

分享到:
评论

相关推荐

    java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

    这是Java动态代理机制生成的类,当我们在代码中使用了接口的代理对象时,JVM会创建这个代理类来实现对原始接口方法的拦截和增强。例如,Spring AOP(面向切面编程)在处理事务时,会为被代理的对象生成这样的代理类...

    java 请求的方法不存在(NoSuchMethodException)

    3. **动态代理**:在使用Java动态代理生成的代理类中,如果尝试调用的目标接口方法不存在,同样会导致异常。 二、常见场景 1. **类加载顺序**:在多模块项目中,类加载顺序可能影响到方法的查找,如果依赖的类或...

    代理模式 proxy-learn.rar

    动态代理则是在运行时动态生成代理类和代理对象。Java提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现动态代理。动态代理的优势在于我们无需手动编写代理类,只需提供一个实现...

    ArcGis代理.Net版本proxy.ashx

    当用户请求ArcGIS服务时,代理服务会动态生成一个token,并将其附加到服务地址上。这种方式使得用户无需直接处理复杂的认证过程,而是由代理服务来处理,简化了客户端的开发。 ArcGIS代理的使用场景通常包括: 1. ...

    动态代理实现文件.....

    2. CGLIB动态代理(Code Generation Library):基于类的代理,如果目标对象没有实现接口,CGLIB可以创建其子类并生成代理。CGLIB使用ASM库在运行时动态生成字节码,从而创建目标对象的子类。与JDK动态代理相比,...

    动态代码生成器动态代码生成器动态代码生成器

    Java的`java.lang.reflect.Proxy`和.NET的`System.Linq.Expressions`可用于创建动态代理,它们通常与动态代码生成结合使用。 8. **安全问题**:动态代码生成也带来了一些安全风险,因为它可能导致代码注入攻击。...

    java Proxy 动态代理

    在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。Proxy类是用于创建一个代理对象,而InvocationHandler接口则定义了代理对象调用方法时的行为。 1. **...

    代理模式(Proxy Pattern)完整示例代码

    动态代理则是运行时生成代理类,不需要手动编写代理类代码。Java提供了两种动态代理实现:JDK动态代理和CGLIB动态代理。 - **JDK动态代理**:基于接口实现,适用于目标对象实现了某个接口的情况。通过`java.lang....

    CGLIB 和 JDK生成动态代理类的区别

    性能方面,CGLIB通常比JDK动态代理更快,因为它是基于字节码生成的子类,而JDK动态代理需要创建接口的实现类。但是,如果目标类已经实现了接口,JDK动态代理的性能开销相对较小,因为它避免了子类继承带来的额外成本...

    Java 动态代理Proxy应用和底层源码分析.pdf

    2. **RPC(远程过程调用)**:在客户端和服务端通信过程中,客户端可以通过动态代理生成一个本地接口的代理对象,从而透明地调用远程服务。 3. **缓存机制**:当接口被调用时,先查询缓存中是否存在结果,如果存在则...

    利用wsdl.exe生成webservice代理类

    利用wsdl.exe生成webservice代理类: 根据提供的wsdl生成webservice代理类 1、开始->程序->Visual Studio 2005 命令提示 2、输入如下红色标记部分 D:\Program Files\Microsoft Visual Studio 8\VC>wsdl /...

    Java动态代理[动态类Proxy的使用]

    首先,`java.lang.reflect.Proxy`是Java标准库中用于生成动态代理类的关键类。它允许我们创建一个新的接口实现类,而无需手动编写具体实现。这个新创建的代理类在运行时动态生成,并且在调用接口方法时,可以插入...

    输出JDK和CGLib动态代理产生的class文件.zip

    - target/classes:编译后的class文件,包括目标接口和实现类的class文件,以及由Proxy生成的代理类class文件 - 测试代码:展示如何使用Proxy创建代理对象并调用方法 2. CGLib代理项目: - src/main/java:包含...

    包含静态代理和动态代理demo代码

    而动态代理则可以在运行时动态生成代理类,避免了大量的重复代码,适用于需要为大量接口创建代理的情况,但理解和使用起来相对复杂。 在压缩包的代码示例中,你可以期待看到如何在Java中实现这两个代理方式的详细...

    Java动态代理实现 Proxy InvocationHandler

    Java动态代理是Java提供的一种在运行时创建代理对象的技术,它可以让我们在不修改原有类代码的情况下,对目标类的方法进行增强或扩展。这种技术主要基于Java的`java.lang.reflect.Proxy`类和`java.lang.reflect....

    AXIS2生成客户端代码教程.zip

    - **生成Stub代码**:MyEclipse会自动处理代码生成过程,包括创建服务接口和服务代理类。这些类提供了调用远程Web服务的方法。 4. **AXIS2配置** 在生成的客户端代码中,你可能需要对AXIS2的一些配置进行调整,...

    java proxy demo 代理类的运用demo

    在Java动态代理机制中,`Proxy`类是生成代理对象的工厂,而`InvocationHandler`接口定义了代理对象的方法调用处理逻辑。当我们创建一个代理对象时,需要提供一个实现了`InvocationHandler`接口的实例,这个实例将...

    Proxy 模式学习代码

    2. **JDK动态代理**:Java的`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口提供了动态生成代理对象的能力。在运行时,我们可以根据接口创建代理对象,而无需预先编写代理类。`...

    深入理解JavaProxy机制.doc

    Java Proxy 机制是Java语言提供的一种动态代理功能,允许我们在运行时创建一个新的类,这个类可以实现一组指定的接口,并且在方法调用时插入自定义的行为。这主要通过`java.lang.reflect.Proxy`类和`java.lang....

    代理模式-静态动态代理-jdk动态代理-cglib动态代理

    JDK动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口实现。 ```java // 创建InvocationHandler public class MyInvocationHandler implements InvocationHandler { private ...

Global site tag (gtag.js) - Google Analytics