美文网首页
小巧的ASM框架的用法实例

小巧的ASM框架的用法实例

作者: 有章 | 来源:发表于2018-10-19 18:48 被阅读0次

查看.class文件命令:
javap -c xxx.class

root@penny ~/c/e/s/s/t/c/c/s/c/s/asm# javap -c ./ASMTest.class
Compiled from "ASMTest.java"
public class com.spring.cloud.springcloudnew.asm.ASMTest {
  public com.spring.cloud.springcloudnew.asm.ASMTest();
    Code:
       0: aload_0
       1: invokespecial #1   // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]) throws java.io.FileNotFoundException;

常用方法介绍:

public final void visit(int version, int access, String name, String signature, String superName, String[] interfaces)
ClassWriter类中方法说明:
(1)定义类头部信息
version:类版本
access:类的访问标识
name:类名称
signature:类签名,如果类不是通用类,并且不扩展或实现泛型类或接口,则可能为null。
superName:超类名称,如果是接口或超类为Object则可能为null
interfaces:类实现的接口名称列表

(2)定义类属性
public final FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
access:字段访问标识
name:字段名称
desc:字段描述
signature:字段签名,若字段类型不是泛型则可以为null
value:字段初始值

(3)定义类方法
public final MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)

access:方法访问标识
name:方法名称
desc:方法描述
signature:方法签名,若方法参数、返回类型和异常没有使用泛型则可能为null
exceptions:方法的异常名,可能为null

示例1:

import org.springframework.asm.ClassWriter;
import org.springframework.asm.Opcodes;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class HelloWorld extends ClassLoader{
    public static void main(String[] args) throws IOException {
        //生成一个类只需要ClassWriter组件即可
        ClassWriter cw = new ClassWriter(0);
        //通过visit方法确定类的头部信息
        String path="springboot.privateDemo.asm.helloworld.Comparable";
        String interfacePath="springboot.privateDemo.asm.helloworld.Mesurable";
        path.replace(".","/");
        interfacePath.replace(".","/");
        cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC + Opcodes.ACC_ABSTRACT + Opcodes.ACC_INTERFACE,
                path, null, "java/lang/Object",
                new String[] {interfacePath});
        // 定义类的属性
        cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC,
                "LESS", "I", null, new Integer(-1)).visitEnd();
        cw.visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL + Opcodes.ACC_STATIC,
                "EQUAL", "I", null, new Integer(0)).visitEnd();
        cw.visitField(Opcodes.ACC_PUBLIC+Opcodes.ACC_FINAL+Opcodes.ACC_STATIC,
                "GREATER", "I", null, new Integer(1)).visitEnd();
        // 定义类的方法
        cw.visitMethod(Opcodes.ACC_PUBLIC + Opcodes.ACC_ABSTRACT, "compareTo",
                "(Ljava/lang/Object;)I", null, null).visitEnd();
        //使cw类已经完成
        cw.visitEnd();
        //将cw转换成字节数组写到文件里面去
        byte[] data = cw.toByteArray();
        String savePath="D:\\vipkid\\private\\private\\src\\main\\java\\springboot\\privateDemo\\asm\\helloworld\\Generator.class";
//        savePath=savePath.replace(".","/");
//        savePath=savePath.concat("/Generator.class");
        File file = new File(savePath);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(data);
        fos.close();
    }
}

接口:

public interface Mesurable {
}

【参考博客】
1.https://blog.csdn.net/aesop_wubo/article/details/48948211

相关文章

  • 小巧的ASM框架的用法实例

    查看.class文件命令:javap -c xxx.class 常用方法介绍: 示例1: 接口: 【参考博客】1...

  • ASM字节码插桩详解

    1、ASM概述 ASM是一个功能比较齐全的java字节码操作与分析框架,通过ASM框架,我们可以动态的生成类或者增...

  • asm实例

    ASM 知识(转自三思笔记) 博客分类: 数据库 最新题库 & 考试交流 & 培训班视频 +微信 cycleyu ...

  • 如何解决Oracle ASM故障导致的数据丢失问题

    摘要:一、故障描述 ASM磁盘组掉线 ,ASM实例不能mount。ASM磁盘组有4个500G的磁盘组成,数据库和A...

  • ASM Core Api 详解

    前言 前面一篇文章 ASM 简介 对 ASM 框架做了简单的介绍。 本篇文章主要对该框架的 Core Api 其中...

  • JAVA中ASM是什么?

    什么是 ASM ? ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可...

  • 深入开源框架底层之ASM

    什么是 ASM ? ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可...

  • 11.2环境ASM实例spfile放在ASM磁盘组的访问方式_3

    背景: 阅读新闻 11.2环境ASM实例spfile放在ASM磁盘组的访问方式 [日期:2014-05-16] 来...

  • ASM 框架字节码插桩的常见用法

    前言 ASM 是一款读写Java字节码的工具,可以达到跳过源码编写,编译,直接以字节码的形式创建类,修改已经存在类...

  • 简单看看ASM框架

    什么是ASM ASM 是一个 Java 字节码操控框架。它能被用来动态生成类或者增强既有类的功能。ASM 可以直接...

网友评论

      本文标题:小巧的ASM框架的用法实例

      本文链接:https://www.haomeiwen.com/subject/ssaroftx.html