Java 下高效的反射工具包 ReflectASM 使用例解

来源:互联网 发布:知乎 避孕套 父母 编辑:程序博客网 时间:2024/05/22 13:25

什么是ReflectASM    ReflectASM是一个很小的java类库,主要是通过asm生产类来实现java反射,执行速度非常快,看了网上很多和反射的对比,觉得ReflectASM比较神奇,很想知道其原理,下面介绍下如何使用及原理。

public class SomeClass {    private String name;    public void foo(String name) {        this.name = name;    }}测试类 ReflectasmClient.javapackage cc.unmi.testreflect;import java.lang.reflect.Method;import com.esotericsoftware.reflectasm.MethodAccess;/** * @author Unmi */public class ReflectasmClient {    public static void main(String[] args) throws Exception {        testJdkReflect();//        testReflectAsm();    }        public static void testJdkReflect() throws Exception {        SomeClass someObject = new SomeClass();                for (int i = 0; i < 5; i++) {            long begin = System.currentTimeMillis();            for (int j = 0; j < 100000000; j++) {                Method method = SomeClass.class.getMethod("foo", String.class);//传统的需要参数类型                method.invoke(someObject, "Unmi");            }            System.out.print(System.currentTimeMillis() - begin +" ");        }    }    public static void testReflectAsm() {        SomeClass someObject = new SomeClass();        for (int i = 0; i < 5; i++) {            long begin = System.currentTimeMillis();            for (int j = 0; j < 100000000; j++) {                MethodAccess access = MethodAccess.get(SomeClass.class);                access.invoke(someObject, "foo", "Unmi");//不需要参数类型            }            System.out.print(System.currentTimeMillis() - begin + " ");        }    }}

跟传统的相比,效率高,更灵活

0 0
原创粉丝点击