当前位置: 首页 > news >正文

定制网站建设公司电话网站建设 教案

定制网站建设公司电话,网站建设 教案,急求一张 网站正在建设中的图片,南京网站建设网站asm 4.0 版本 http://forge.ow2.org/plugins/scmsvn/index.php?group_id23 asm是java的字节码操作框架#xff0c;可以动态查看类的信息#xff0c;动态修改#xff0c;删除#xff0c;增加类的方法。 下面基于4.0版本的一个使用示例#xff0c;演示了对类Foo进行修改方法… asm 4.0 版本 http://forge.ow2.org/plugins/scmsvn/index.php?group_id23   asm是java的字节码操作框架可以动态查看类的信息动态修改删除增加类的方法。   下面基于4.0版本的一个使用示例演示了对类Foo进行修改方法名称增加方法修改方法内容等  import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes;public class AsmExample extends ClassLoader implements Opcodes{public static class Foo {public static void execute() {System.out.println(test changed method name);}public static void changeMethodContent() {System.out.println(test change method);}}public static void main(String[] args) throws IOException, IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException {ClassReader cr new ClassReader(Foo.class.getName());ClassWriter cw new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);ClassVisitor cv new MethodChangeClassAdapter(cw);cr.accept(cv, Opcodes.ASM4);//新增加一个方法MethodVisitor mw cw.visitMethod(ACC_PUBLIC ACC_STATIC,add,([Ljava/lang/String;)V,null,null);// pushes the out field (of type PrintStream) of the System classmw.visitFieldInsn(GETSTATIC,java/lang/System,out,Ljava/io/PrintStream;);// pushes the Hello World! String constantmw.visitLdcInsn(this is add method print!);// invokes the println method (defined in the PrintStream class)mw.visitMethodInsn(INVOKEVIRTUAL,java/io/PrintStream,println,(Ljava/lang/String;)V);mw.visitInsn(RETURN);// this code uses a maximum of two stack elements and two local// variablesmw.visitMaxs(0, 0);mw.visitEnd();// gets the bytecode of the Example class, and loads it dynamicallybyte[] code cw.toByteArray();AsmExample loader new AsmExample();Class? exampleClass loader.defineClass(Foo.class.getName(), code, 0, code.length);for(Method method: exampleClass.getMethods()){System.out.println(method);}System.out.println(*************);// uses the dynamically generated class to print HelloworldexampleClass.getMethods()[0].invoke(null, null); //調用changeMethodContent修改方法內容System.out.println(*************);exampleClass.getMethods()[1].invoke(null, null); //調用execute,修改方法名// gets the bytecode of the Example class, and loads it dynamicallyFileOutputStream fos new FileOutputStream(e:\\logs\\Example.class);fos.write(code);fos.close();}static class MethodChangeClassAdapter extends ClassVisitor implements Opcodes {public MethodChangeClassAdapter(final ClassVisitor cv) {super(Opcodes.ASM4, cv);}Overridepublic void visit(int version,int access,String name,String signature,String superName,String[] interfaces){if (cv ! null) {cv.visit(version, access, name, signature, superName, interfaces);}}Overridepublic MethodVisitor visitMethod(int access,String name,String desc,String signature,String[] exceptions){if (cv ! null execute.equals(name)) { //当方法名为execute时修改方法名为execute1return cv.visitMethod(access, name 1, desc, signature, exceptions);}if(changeMethodContent.equals(name)) //此处的changeMethodContent即为需要修改的方法 修改方法內容{ MethodVisitor mv cv.visitMethod(access, name, desc, signature, exceptions);//先得到原始的方法 MethodVisitor newMethod null; newMethod new AsmMethodVisit(mv); //访问需要修改的方法 return newMethod; } if (cv ! null) {return cv.visitMethod(access, name, desc, signature, exceptions);}return null;}}static class AsmMethodVisit extends MethodVisitor {public AsmMethodVisit(MethodVisitor mv) {super(Opcodes.ASM4, mv); }Overridepublic void visitMethodInsn(int opcode, String owner, String name, String desc) {super.visitMethodInsn(opcode, owner, name, desc);}Overridepublic void visitCode() { //此方法在访问方法的头部时被访问到仅被访问一次//此处可插入新的指令super.visitCode();}Overridepublic void visitInsn(int opcode) { //此方法可以获取方法中每一条指令的操作类型被访问多次//如应在方法结尾处添加新指令则应判断if(opcode Opcodes.RETURN){// pushes the out field (of type PrintStream) of the System classmv.visitFieldInsn(GETSTATIC,java/lang/System,out,Ljava/io/PrintStream;);// pushes the Hello World! String constantmv.visitLdcInsn(this is a modify method!);// invokes the println method (defined in the PrintStream class)mv.visitMethodInsn(INVOKEVIRTUAL,java/io/PrintStream,println,(Ljava/lang/String;)V); // mv.visitInsn(RETURN);}super.visitInsn(opcode);}}}输出   add方法是新增的execute方法名改为execute1changeMethodContent方法修改后增加了输出this is a modify method! public static void AsmExample$Foo.changeMethodContent() public static void AsmExample$Foo.execute1() public static void AsmExample$Foo.add(java.lang.String[]) public native int java.lang.Object.hashCode() public final native java.lang.Class java.lang.Object.getClass() public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException public final void java.lang.Object.wait() throws java.lang.InterruptedException public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException public boolean java.lang.Object.equals(java.lang.Object) public java.lang.String java.lang.Object.toString() public final native void java.lang.Object.notify() public final native void java.lang.Object.notifyAll() ************* test change method this is a modify method! ************* test changed method name我们把最终的字节码保存到文件中e:\\logs\\Example.class中再用反编译工具java decompiler 查看最终的生成的源码   最终的类如下 import java.io.PrintStream;public class AsmExample$Foo {public static void execute1(){System.out.println(test changed method name);}public static void changeMethodContent() {System.out.println(test change method);System.out.println(this is a modify method!);}public static void add(String[] paramArrayOfString){System.out.println(this is add method print!);} }接下来再慢慢研究asm里面对字节码的操作还有其他框架是如果使用asm的。转载于:https://www.cnblogs.com/zhwj184/archive/2012/08/13/3027473.html
http://www.yutouwan.com/news/26369/

相关文章:

  • 狗狗和人做网站丹东搜索引擎优化
  • 公司网站建设哪家公司好电子商务网站建设的核心多选
  • 国外网站制作wordpress 提交评论
  • 东莞做网站建设wordpress 安装 此网页包含重定向循环
  • 常州新北区网站建设现在推广平台哪家最好
  • 个人网站 备案 攻略织梦技术个人网站模板
  • 注册网站引流网络营销岗位有哪些
  • 网站建设完成确认书郴州哪个县最繁华
  • 手机网站建设方案智慧团建网页
  • 苏州专业做网站公司有哪些如何防止网站被攻击
  • 网站推广服务商公司网站建设意见和建议
  • 北京平台网站建设价格赤峰建设业协会的官方网站
  • 做彩票网站用什么服务器濮阳网站建设价格
  • 北京网站建设公司哪些好自己怎么接单做网站
  • 阿里云建站视频商品网站做推广方案
  • 网站发布与推广方式下载京东网上商城
  • 旅游网站的建设依据和背景wordpress 科技企业主题
  • 无锡市建设银行总行网站重庆营销型网站建设沛宣
  • 外贸网站建设ppt模板网站开发和数据库哪个有前途
  • 上海企业做网站企业营销案例
  • 网站推广途径及要点wordpress 插件路由
  • 广州品牌建站广州品牌建站青海做网站最好的公司
  • 专业定制网站设计网站ftp密码怎么修改
  • 济南品牌网站制作方案飞沐网站建设公司北京
  • 网站是什么意思例如网站设计常见流程
  • wordpress5.2多站点设置方法微信公众平台导航 wordpress模版
  • 好看的企业网站首页建设一个网站首先需要
  • 咸宁做网站公司网站成功秘诀
  • 游戏网站模板免费下载信誉比较好的网上做任务的网站
  • 大连电子商务网站建设wordpress 搬家 后台