1. XenForo 1.5.14 中文版——支持中文搜索!现已发布!查看详情
  2. Xenforo 爱好者讨论群:215909318 XenForo专区

新闻 ASMSupport 0.4 版本发布,Java 字节码操作 下载

本帖由 漂亮的石头2015-04-07 发布。版面名称:软件资讯

  1. 漂亮的石头

    漂亮的石头 版主 管理成员

    注册:
    2012-02-10
    帖子:
    486,020
    赞:
    46
    ASMSupport 0.4发布,0.4版本主要改变是采用了全新的Dummy方式的API来生成class,比如希望生成如下代码

    public class FirstCase {

    public static void main(String[] args) {
    System.out.println("Hello ASMSupport.");
    }

    }

    0.3以前版本

    ClassCreator creator = new ClassCreator(Opcodes.V1_5, Opcodes.ACC_PUBLIC , "FirstCase", null, null);
    creator.createStaticMethod("main",
    new AClass[]{AClassFactory.getProductClass(String[].class)},
    new String[]{"args"}, null, null, Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC,
    new StaticMethodBody(){

    @Override
    publicvoid generateBody(LocalVariable... argus) {
    invoke(systemOut, "println", Value.value("Hello ASMSupport."));
    runReturn();
    }

    });
    Class FirstCaseClass = creator.startup()

    新版本

    DummyClass dummy = new DummyClass("FirstCase").public_()
    .newMethod("main").public_().static_().argTypes(String[].class)
    .body(new MethodBody(){
    public void body(LocalVariable... args) {
    call(defType(System.class).field("out"), "println", val("Hello ASMSupport."))
    return_();
    }
    });
    Class<?> FirstCaseClass = dummy.build();

    除此之外还有如下突破。

    新特性


    1. 增加全新Dummy方式API


    2. 采用链式结构作为执行队列


    3. 重构程序块实现


    4. 采用asm 0.5版本


    5. 第三方jar包零依赖


    6. 简化优化接口设计


    7. 获取类或者变量的成员时判断是否有权限访问
    已修复Bug


    1 . catch块中重复的异常名“e”
    2 . 生成调用构造方法的字节码时,传递的参数列表和和实际参数列表不同,但仍能创建成功
    3 . 生成变元方法的调用,并且传入空参数抛下标越界
    4 . AClass的isChildOrEqual方法异常(接口不是Object子类)
    5 . 重写父类方法,但是设置其返回类型为被重写方法的返回类型的子类型
    6 . 新创建的方法中无法调用重写方法
    7 . 无法生成获取父类属性的字节码
    8 . 创建的枚举类型缺少常量ENUM$VALUES
    9 . 创建的枚举类缺少values方法和valueOf方法

    源码包结构

    asmsupport
    |-src/main/java
    |-java : Maven standard source
    |-.../asmsupport
    |-standard : ASMSupport实现标准API
    |-client : ASMSupport权限Dummy实现
    |-core : ASMSupport核心实现
    |-resource : Maven standard source resources
    |-src/test
    |-java : Maven standard test
    |-resource : Maven standard test resources
    |-src/third/java : ASMSupport依赖的第三方包源码(作为maven编译的源码包)
    |-src/issue/java : ASMSupport修复bug的测试用例(作为maven编译的测试包)
    |-src/sample/java : ASMSupport样例.(作为maven编译的测试包)
    |-oldApi : 使用老版api的实例.
    |-dummy : 使用dummy api的实例
    |-json : 使用dummy api实现的一个简单的json序列化实例
    |-proxy : 使用dummy api实现的一个简单动态代理实例。
    |-src/site : 项目文档目录.

    如果希望将项目导入eclipse,至少需要手动设置src/third/java为源码目录为了方便入手和学习,在src/sample/java下还提供了简单的实例:比如实现字节码实现的json序列化工具,字节码实现的动态代理工具,分别运行json/demo/Runner.java和proxy/demo/Runner.java类测试这两个工具。

    Maven

    <dependency>
    <groupId>cn.wensiqun</groupId>
    <artifactId>asmsupport</artifactId>
    <version>0.4</version>
    </dependency>

    地址


    当使用ASM编写的时候 很多情况下需要了解JVM底层的指令的, 并且需要对栈和本地变量显式的进行操作, 如果直接用ASM进行开发势必会付出更多的学习成本和时间成本,并且不易后期的维护。

    此框架正好缓解了上述问题。是程序员编写字节码的时候更易于理解和开发,屏蔽了JVM指令以及栈和本地变量的操作,开发的时候更趋近与直接编写java程序。
    ASMSupport 0.4 版本发布,Java 字节码操作下载地址
     
正在加载...