/** * 这个方法是为了生成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); } }
中的构造器
网友评论