Method.invoke与MethodAccess.invoke的区别
来源:互联网 发布:网站用户数据分析 编辑:程序博客网 时间:2024/05/22 12:42
本篇文章主要介绍java.reflect.Method与com.esotericsoftware.reflectasm.MethodAccess的区别。不多说,先贴上代码。
package org;import com.alibaba.fastjson.JSON;import com.baomidou.mybatisplus.annotations.TableField;import com.esotericsoftware.reflectasm.MethodAccess;import org.ibase4j.core.base.BaseModel;import org.springframework.data.annotation.Transient;import java.lang.reflect.Method;/** * reflect compare * * @author linchuangang * @create 2017-09-13 14:23 **/public class MethodInvoke extends BaseModel { private int a; private static int b =2; private transient int c; @Transient private int d; @TableField(exist = false) private int e; @TableField("f_") private int f; public int getA() { return a; } public void setA(int a) { this.a = a; } public static int getB() { return b; } public static void setB(int b) { MethodInvoke.b = b; } public int getC() { return c; } public void setC(int c) { this.c = c; } public int getD() { return d; } public void setD(int d) { this.d = d; } public int getE() { return e; } public void setE(int e) { this.e = e; } public int getF() { return f; } public void setF(int f) { this.f = f; } public MethodInvoke(int a, int c, int d, int e,int f) { this.a = a; this.c = c; this.d = d; this.e = e; this.f = f; } public void prints(BaseModel baseModel){ System.out.println(JSON.toJSONString(baseModel)); } public void print(int a){} public void print(int a,int b){} public void print(int a,byte b){} public void print(int a,byte[]b){} public void print(int a,float b){} public void print(int a,double b){} public void print(int a,boolean b){} public void print(int a,Object b){} public void print(int a,int[]i){} public static void main(String[]args)throws Exception{ MethodInvoke invoke = new MethodInvoke(1,3,4,5,6); //id为父类的属性 invoke.setId(System.currentTimeMillis()); Long a = System.currentTimeMillis(); MethodAccess access = MethodAccess.get(invoke.getClass()); access.invoke(invoke,"prints",invoke); Long b = System.currentTimeMillis(); System.out.println("MethodAccess use:"+(b-a)+"ms"); Long c = System.currentTimeMillis(); Method method = invoke.getClass().getMethod("prints", BaseModel.class); method.invoke(invoke,invoke); Long d = System.currentTimeMillis(); System.out.println("first,java.reflect.Method use:"+(d-c)+"ms"); c = System.currentTimeMillis(); Method method1 = invoke.getClass().getMethod("prints", BaseModel.class); method.invoke(invoke,invoke); d = System.currentTimeMillis(); System.out.println("twice,java.reflect.Method use:"+(d-c)+"ms"); }}
代码运行结果:
{"a":1,"d":4,"e":5,"f":6,"id":1505288185633}
MethodAccess use:206ms
{"a":1,"d":4,"e":5,"f":6,"id":1505288185633}
first,java.reflect.Method use:0ms
{"a":1,"d":4,"e":5,"f":6,"id":1505288185633}
twice,java.reflect.Method use:0ms
注释掉MethodAccess的invoke方法后,运行结果:
{"a":1,"d":4,"e":5,"f":6,"id":1505288412911}
first,java.reflect.Method use:193ms
{"a":1,"d":4,"e":5,"f":6,"id":1505288412911}
twice,java.reflect.Method use:0ms
至于过程解释,找时间再来更新
阅读全文
0 0
- Method.invoke与MethodAccess.invoke的区别
- Method的Invoke方法
- Method的Invoke方法。
- Method的Invoke方法
- method.invoke
- Method invoke
- Method类的Invoke方法
- Invoke()/BeginInvoke()的区别
- 同步与异步区别,Invoke与BeginInoke的区别
- Method的invoke()方法的使用
- Method的invoke()方法的使用
- Method类invoke方法的用法
- Java method invoke的指令简介
- Method类invoke方法的使用
- java中的反射--method的invoke方法
- Method类invoke方法的使
- Method类invoke方法的使用
- Method类invoke方法的使用
- python编写的adb 脚本 (二)查看系统状态
- Java提高篇——Java 异常处理
- React native的flexbox布局(三)
- 用路由器创建自己的网页之ftp服务器
- 虚拟机不能联网的解决办法(从虚拟机创建到项目运行三)
- Method.invoke与MethodAccess.invoke的区别
- Oracle常用查询表空间的操作
- 超完整的Chrome浏览器客户端调试大全
- PHP中运算的先后顺序
- 学习KNN(二)KNN算法手写数字识别的OpenCV实现
- 通过Iframe跨域获取其它站的数据 或获取某页面及数据
- tomcat配置目录映射
- 解析JSON到ListView,点击传值
- Maven安装指定的文件到本地仓库。