http://www.oschina.net/p/reflectasm
ReflectASM 是一个非常小的 Java 类库,通过代码生成来提供高性能的反射处理,自动为 get/set 字段提供访问类,访问类使用字节码操作而不是 Java 的反射技术,因此非常快。
性能比较:
什么是ReflectASM ReflectASM是一个很小的java类库,主要是通过asm生产类来实现java反射,执行速度非常快,看了网上很多和反射的对比,觉得ReflectASM比较神奇,很想知道其原理,下面介绍下如何使用及原理。
如何使用
public class User { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public class ReflectAsmTest { public static void main(String[] args) { User user = new User(); //使用reflectasm生产User访问类 MethodAccess access = MethodAccess.get(User.class); //invoke setName方法name值 access.invoke(user, "setName", "张三"); //invoke getName方法 获得值 String name = (String)access.invoke(user, "getName", null); System.out.println(name); } }
输出:
张三
原理
上面代码的确实现反射的功能,代码主要的核心是 MethodAccess.get(User.class);
看了下源码,这段代码主要是通过asm生产一个User的处理类 UserMethodAccess(这个类主要是实现了invoke方法)的ByteCode,然后获得该对象,通过上面的invoke操作user类。
MethodAccess反编辑源码
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) package com.johhny.ra; import com.esotericsoftware.reflectasm.MethodAccess; // Referenced classes of package com.johhny.ra: // User public class UserMethodAccess extends MethodAccess { public UserMethodAccess() { } /** * 这个方法是主要是实现了MethodAccess 的抽象方法,来实现反射的功能 * @param obj 需要反射的对象 * @param i class.getDeclaredMethods 对应方法的index * @param 参数对象集合 * @return */ public transient Object invoke(Object obj, int i, Object aobj[]) { User user = (User)obj; switch(i) { case 0: // '\0' return user.getName(); case 1: // '\001' return Integer.valueOf(user.getId()); case 2: // '\002' user.setName((String)aobj[0]); return null; case 3: // '\003' user.setId(((Integer)aobj[0]).intValue()); return null; } throw new IllegalArgumentException((new StringBuilder("Method not found: ")).append(i).toString()); } }
看了UserMethodAccess源码后明白 ReflectASM 为什么会比java放射快那么多,其实就是我们的bean调用里面的方法,速度当然很快
注意:
1. MethodAccess.get()方法比较耗时的,特别是类方法比较多的时候,如果生成的反射类用到的地方比较多或者会多次调用,建议缓存下来,如果使用次数很少建议还是使用反射来完成功能
相关推荐
库,它通过使用代码生成来提供高性能的反射。 生成访问类以设置/获取字段、调用方法或创建新实例。 访问类使用字节码而不是 Java 的反射,因此速度要快得多。 它还可以通过字节码访问原始字段以避免装箱。 表现 这些...
赠送jar包:reflectasm-1.11.3.jar; 赠送原API文档:reflectasm-1.11.3-javadoc.jar; 赠送源代码:reflectasm-1.11.3-sources.jar; 赠送Maven依赖信息文件:reflectasm-1.11.3.pom; 包含翻译后的API文档:...
ReflectASM 是一个非常小的 Java 类库,通过代码生成来提供高性能的反射处理,自动为 get/set 字段提供访问类,访问类使用字节码操作而不是 Java 的反射技术,因此非常快。 性能比较: 示例代码:SomeClass ...
赠送jar包:reflectasm-1.11.3.jar; 赠送原API文档:reflectasm-1.11.3-javadoc.jar; 赠送源代码:reflectasm-1.11.3-sources.jar; 赠送Maven依赖信息文件:reflectasm-1.11.3.pom; 包含翻译后的API文档:...
reflectasm-1.01.jar
<value>file:///root/apache-hive-1.2.1-bin/lib/minlog-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/objenesis-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/reflectasm-1.07-shaded.jar ...
java jar包,亲测试可用 安全,可以对其进行数字签名,只让能够识别数字签名的用户使用里面的东西。 加快下载速度; 压缩,使文件变小,与ZIP压缩机制完全相同。 ...能够让JAR包里面的文件依赖于统一版本的类文件。...
heritrix3项目爬虫中所使用到的一个依赖包,reflectasm-0.8.jar包,有需要的朋友们,赶紧下载吧, 本人亲测过. 有积分的猿友们,赏个积分,没积分的,关注博主,私信发.
java运行依赖jar包
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
注:下文中的 *** 代表文件名中的组件名称。 # 包含: 中文-英文对照文档:【***-javadoc-API文档-中文(简体)-英语-对照版.zip】 jar包下载地址:【***.jar下载地址(官方地址+国内镜像地址).txt】 ...
氦 Helium是使用ReflectASM的开源事件调度程序氦气还没有完成,一旦准备好,我会制造它,以便您可以将其添加为依赖项
MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。对于非黏性Session,...
commons-codec-1.5.jar couchbase-client-1.4.0.jar ... javolution-5.4.3.1.jar jettison-1.3.jar kryo-1.04.jar kryo-serializers-0.10.jar memcached-2.6.jar ... reflectasm-0.9.jar spymemcached-2.11.1.jar
最新tomcat7+nginx/tengine+memcached共享session的jar包2016年12月自己更新使用,更新的jar包解决了tomcat7下attribute报错的问题,理论Tomcat8以上版本可用,请... reflectasm-1.11.3.jar spymemcached-2.12.1.jar
以下这些jar包打成一个rar压缩包...reflectasm-1.01.jar netty-3.5.5.Final.jar msm-kryo-serializer-1.6.5.jar minlog-1.2.jar kryo-1.04.jar jettison-1.1.jar httpcore-4.1.1.jar commons-codec-1.5.jar asm-3.2.jar
2.4.jar、reflectasm-1.11.3.jar、spymemcached-2.12.2.jar、memcached-session-manager-tc7-1.9.7.jar(Tomcat7使用)、memcached-session-manager-tc8-1.9.7.jar(Tomcat8使用)、memcached-session-manager-tc9-...
<value>file:///root/apache-hive-1.2.1-bin/lib/minlog-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/objenesis-1.2.jar,file:///root/apache-hive-1.2.1-bin//lib/reflectasm-1.07-shaded.jar ...
自测适用于tomcat7,其他tomcat没有测试 asm kryo kryo-serializer kryo-serializers memcached-session-manager memcached-session-manager-tc7 minlog objenesis reflectasm spymemcached
memcached-session-manager-1.8.1 ;memcached-session-manager-tc8-1.8.1;kryo-serializers-0.11;kryo-1.04;asm-3.2;minlog-1.2;msm-kryo-serializer-1.8.1;reflectasm-1.01;spymemcached-2.11.1