/** * 这个方法是为了生成Proxy的子类的构造器方法的 */ private MethodInfo generateConstructor() throws IOException { MethodInfo minfo = new MethodInfo( "<init>", "(Ljava/lang/reflect/InvocationHandler;)V", ACC_PUBLIC); # name descriptor access_flags DataOutputStream out = new DataOutputStream(minfo.code); code_aload(0, out); # aload_0 即,因为本方法不是静态方法,所以载入this code_aload(1, out); # aload_1 载入第一个参数 out.writeByte(opc_invokespecial); #调用父类构造器 out.writeShort(cp.getMethodRef( superclassName, "<init>", "(Ljava/lang/reflect/InvocationHandler;)V")); # 调用父类 Proxy的Proxy(InvocationHandler)构造器 out.writeByte(opc_return); # return 返回 minfo.maxStack = 10; # 栈深度10 minfo.maxLocals = 2; # 最大局部变量Slot为2 minfo.declaredExceptions = new short[0]; # 异常个数为0 return minfo; }上面这个方法等效于
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; public class ProxyChild extends Proxy { protected ProxyChild(InvocationHandler h) { super(h); } }中的构造器
java ProxyGenerator 的方法 sun.misc.ProxyGenerator#generateConstructor 分析
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 这周时间过的真快,一晃又到周日了! 虽然依然和往常一样,每天工作外的时间在计划-学习-总结中度过,节奏紧张而充实。...