基础
源码分析
进入Proxy.newProxyInstance
进入getProxyClass0
proxyClassCache在哪里设置?
原来是一个弱引用。进入ProxyClassFactory
关键代码:生成二进制class数据流
生成二进制class数据流
byte[] proxyClassFile = ProxyGenerator.generateProxyClass( proxyName, interfaces, accessFlags);
generateClassFile():生产二进制数据流
saveGeneratedFiles:配置参数。默认是false,不在本地生产文件。直接返回数据流即可。
就是sun.misc.ProxyGenerator.saveGeneratedFiles这个参数:
return defineClass0(loader, proxyName, proxyClassFile, 0, proxyClassFile.length);
调用native本地方法生成
调用构造函数,生产class对象
总结
JDK Proxy 生成对象的步骤
1、拿到被代理对象的引用,并且获取到它的所有的接口,反射获取。
2、JDK Proxy 类重新生成一个新的类、同时新的类要实现被代理类所有实现的所有的接 口。
3、动态生成 Java 代码,把新加的业务逻辑方法由一定的逻辑代码去调用(在代码中体 现)。
4、编译新生成的 Java 代码.class。
5、再重新加载到 JVM 中运行。