【java设计模式】之 代理(Proxy)模式(下)
接上一篇代理(Proxy)模式,看下proxy内部到底做了什么处理。通过上篇的代码debug,如图 p 发现这里调用proxy发现如下图中的$Proxy0和$Proxy1代理类,如何来的呢?先回顾一些知识: 类的完整生命周期如图: 一般类的完整生命周期从源文件开始,然后通过javac编译成字节码文件,然后通过类加载机制在元空间(1.7之前为方法区)生成class对象,然后new出实例化对象在堆中,之后通过可达性分析判断类是否还在被引用,没有引用在被垃圾回收GC回收。完整的生命周期。为啥在动态代理中谈到这个类的生命周期, 其实所谓的$Proxy0和$Proxy1变量的生成就是跳过了源文件的编译直接从 内存中生成的字节码。 接下来我们去看看源码,里面到底是如何在内存中生成字节码文件的。首先看到之前的getProxyInstance()方法: 进入看看源码: public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException { Objects.requireNonNull(h); final Class<?>[] intfs = interfaces.clone(); final