Classworking 工具箱: ASM classworking - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-14
n for reference to target class instance
String tiname = Type.getInternalName(tclas);
String ttype = "L" + tiname + ";";
cw.visitField(0, "m_bean", ttype, null, null).visitEnd();
// generate the default constructor
MethodVisitor mv =
cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
mv.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object",
"<init>", "()V");
mv.visitInsn(Opcodes.RETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// generate the setTarget method
mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "setTarget",
"(Ljava/lang/Object;)V", null, null);
mv.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitVarInsn(Opcodes.ALOAD, 1);
mv.visitTypeInsn(Opcodes.CHECKCAST, tiname);
mv.visitFieldInsn (Opcodes.PUTFIELD, ciname, "m_bean", ttype);
mv.visitInsn (Opcodes.RETURN);
mv.visitMaxs(2, 2);
mv.visitEnd();
// generate the getValue method
mv = cw.visitMethod (Opcodes.ACC_PUBLIC, "getValue", "()I", null, null);
mv.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitFieldInsn(Opcodes.GETFIELD, ciname, "m_bean", ttype);
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, tiname,
gmeth.getName(), "()I");
mv.visitInsn (Opcodes.IRETURN);
mv.visitMaxs(1, 1);
mv.visitEnd();
// generate the setValue method
mv = cw.visitMethod (Opcodes.ACC_PUBLIC, "setValue", "(I)V", null, null);
mv.visitCode();
mv.visitVarInsn(Opcodes.ALOAD, 0);
mv.visitFieldInsn(Opcodes.GETFIELD, ciname, "m_bean", ttype);
mv.visitVarInsn(Opcodes.ILOAD, 1);
mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, tiname,
smeth.getName(), "(I) V");
mv.visitInsn(Opcodes.RETURN);
mv.visitMaxs(2, 2);
mv.visitEnd();
// complete the class generation
cw.visitEnd();
return cw.toByteArray();
}
public static void main(String[] args) throws Exception {
if (args.length == 1) {
ASMCalls inst = new ASMCalls();
inst.test(args [0]);
} else {
System.out.println("Usage: ASMCalls loop- count");
}
}
}
Classworking 工具箱: ASM classworking(4)时间:2011-10-16 IBM Dennis M. Sosnoski清单 3 的 createAccess() 代码演示了使 用 ASM 的基本原则。我从创建 org.objectweb.asm.ClassWriter 开始, org.objectweb.asm.ClassWriter 接受类事件流(以方法调用的形式)并生成二 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于Classworking 工具箱: ASM classworking - 编程入门网的所有评论