`
samttsch
  • 浏览: 63799 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

如何获得Java动态代理的代理类

 
阅读更多
JDK 代理生成器,在生成类是会根据参数“sun.misc.ProxyGenerator.saveGeneratedFiles”来决定是否将二进制保存到本地文件中,
具体的路径查看源码:
ProxyGenerator.access$000(this.val$name) + ".class"
根据access$000这个方法生成的路径来保存

在openjdk中这个access$000 是对应

private static String dotToSlash(String name) {
        return name.replace('.', '/');
}

所以文件是保存在

FileOutputStream localFileOutputStream = new FileOutputStream(ProxyGenerator.access$000(this.val$name) + ".class");

可以测试一下这个文件存放的具体路径:

FileOutputStream file = new FileOutputStream("$Proxy0" + ".class");

System.out.println(new File("$Proxy0" + ".class").getAbsolutePath());

这样在下面生成动态代理类的时候会将class文件保存

反编译class文件,可以看到有一个参数为InvocationHandler的构造方法,实现接口方法种的代码如下:
public final void printA()
    throws 
  {
    try
    {
      this.h.invoke(this, m3, null);
      return;
    }
    catch (RuntimeException localRuntimeException)
    {
      throw localRuntimeException;
    }
    catch (Throwable localThrowable)
    {
    }
    throw new UndeclaredThrowableException(localThrowable);
  }


表明代理类只是做了一层封装,具体实现是在InvocationHandler中来做。



2
2
分享到:
评论
3 楼 heshuanxu 2016-09-21  
我还是没找到文件位置,加入
FileOutputStream file = new FileOutputStream("$Proxy0" + ".class");

System.out.println(new File("$Proxy0" + ".class").getAbsolutePath());
着两行生成的类文件是空的,没有啊
2 楼 abc08010051 2013-10-14  
很有用,很实用
1 楼 daly1987 2011-12-18  
很好的文章!

相关推荐

    java + 动态代理 + 动态代理实际应用场景

    1:静态代理出现的实际背景,静态代理时如何演化成动态代理 2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic...4: 动态代理使用到基础理论:Class.forName("xxxx") 得到Class类 。

    java动态代理例子

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理类,这些代理类可以作为原有类的代理,从而在不修改原有类代码的情况下,扩展或增强原有类的功能。这里我们将深入探讨两个主要的Java动态代理...

    Java静态代理和动态代理

    与静态代理不同,动态代理在程序运行时生成,利用Java的反射API动态创建代理类。动态代理适用于那些在运行时才知道需要代理的对象或者代理行为的情况。Java提供了`java.lang.reflect.Proxy`类和`java.lang.reflect....

    java动态代理新java动态代理新java动态代理新

    1. **Proxy**:这是一个工具类,用于创建一个实现了一组给定接口的动态代理类。我们可以通过调用 `Proxy.newProxyInstance()` 方法来创建一个动态代理对象。 2. **InvocationHandler**:这是一个接口,它定义了一...

    Java动态代理资源包

    CGLIB通过生成子类并在子类中拦截方法调用来实现代理,这与Java的反射API不同,反射API是通过在运行时动态修改类的实例来实现代理的。 **CGLIB工作原理:** 1. **子类生成**:CGLIB通过ASM库在运行时动态生成目标类...

    经典java反射和动态代理代码

    Java反射和动态代理是Java编程中的重要特性,它们允许程序在运行时检查和操作类、接口、对象等的内部结构,以及动态地创建代理对象来处理特定任务。在这篇文章中,我们将深入探讨这两个主题,结合"reflections"这个...

    java动态代理(1)

    `ProxyFunction.java`可能包含了自定义的`InvocationHandler`实现,`ComputerProxy.java`可能是代理类,实现了与计算机相关的接口(比如`ComputerMaker`和`SaleComputer`)。`Test.java`应该是测试类,用于验证动态...

    Java动态代理.pdf

    总的来说,Java动态代理是通过在运行时生成代理类或对象来实现对原有对象功能的扩展,它可以让我们在不修改原代码的情况下,灵活地插入横切关注点,如日志、事务管理、性能监控等。Spring AOP正是利用了这一特性,为...

    java 反射与动态代理

    Java动态代理是一种在运行时动态创建代理类和代理对象的技术,主要由`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口组成。 1. **Proxy类**:`Proxy`类用于生成动态代理类和实例,这个类...

    Java反射机制与动态代理

    - `Proxy`类提供了`newProxyInstance()`方法,创建一个动态代理类的实例,代理类会实现与被代理对象相同的接口。 - `InvocationHandler`接口定义了一个`invoke()`方法,当调用代理对象的方法时,实际上会执行这个...

    Java动态代理机制分析及扩展

    Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类。代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员...

    Jdk动态代理和cglib动态代理原理

    JDK动态代理是Java内置的一种机制,依赖于`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口。以下是JDK动态代理的基本工作原理: 1. **InvocationHandler接口**:这是处理代理对象方法调用...

    JAVA的反射机制与动态代理.pdf

    - **`java.lang.reflect.Proxy`**:提供创建动态代理类和实例的方法。 - **`java.lang.reflect.InvocationHandler`**:接口,需要实现`invoke(Object proxy, Method method, Object[] args)`方法,该方法在代理对象...

    java获取浏览器代理设置

    首先,Java中的`java.net.ProxySelector`类是用于选择网络连接所使用的代理服务器。通过这个类,我们可以获取到系统当前的代理设置。但是,直接使用`ProxySelector.getDefault()`只能得到系统级别的代理设置,而无法...

Global site tag (gtag.js) - Google Analytics