1、

com.esotericsoftware

reflectasm

1.11.9

1、实体类

package com.redisson;

/**

* @Description TODO

* @Date 2020/7/28 13:41

* @Author zsj

*/

public class Person {

public int age;

public String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String say(int age, String name) {

return "hh+" + age + "---" + name;

}

}

2、测试类

package com.redisson;

import com.esotericsoftware.reflectasm.ConstructorAccess;

import com.esotericsoftware.reflectasm.FieldAccess;

import com.esotericsoftware.reflectasm.MethodAccess;

/**

* @Description TODO

* @Date 2020/9/10 9:15

* @Author zsj

*/

public class ReflectasmTest {

public static void main(String[] args) {

// testReflectAsm4Name();

// testReflectAsm4Index();

// testFieldAccess();

// testConstructorAccess();

testIndex();

}

/**

* ReflectAsm反射调用方法

* 用名称定位反射方法

*/

public static void testReflectAsm4Name() {

Person target = new Person();

MethodAccess access = MethodAccess.get(Person.class);//生成字节码的方式创建UserServiceMethodAccess

long start = System.currentTimeMillis();

for (int i = 0; i < 100000000; i++) {

Object object = access.invoke(target, "say", i, i + "hhhll");

// System.out.println(object);

}

long end = System.currentTimeMillis();

System.out.println("timeout=" + (end - start));//523 382 415 489 482

}

/**

* ReflectAsm反射调用方法

* 用方法和字段的索引定位反射方法,性能高

*/

public static void testReflectAsm4Index() {

Person target = new Person();

MethodAccess access = MethodAccess.get(Person.class);

int index = access.getIndex("say", int.class, String.class);

long start = System.currentTimeMillis();

for (int i = 0; i < 100000000; i++) {

access.invoke(target, index, 1, "zhangsan");

}

long end = System.currentTimeMillis();

System.out.println("timeout=" + (end - start));//12 15 23 14 24

}

/**

* ReflectAsm反射来set/get字段值

*/

public static void testFieldAccess() {

Person target = new Person();

FieldAccess fieldAccess = FieldAccess.get(target.getClass());

long start = System.currentTimeMillis();

for (int i = 0; i < 100000000; i++) {

fieldAccess.set(target, "age", 100);

}

long end = System.currentTimeMillis();

System.out.println("timeout=" + (end - start));

int state = (Integer) fieldAccess.get(target, "age");

System.out.println(state);

}

/**

* ReflectAsm反射来调用构造方法

*/

public static void testConstructorAccess() {

ConstructorAccessconstructorAccess = ConstructorAccess.get(Person.class);

Person person = constructorAccess.newInstance();

System.out.println(person);

}

/**

* 查找方法的索引

*/

public static void testIndex() {

Person target = new Person();

MethodAccess methodAccess = MethodAccess.get(target.getClass());

int index = methodAccess.getIndex("say", int.class, String.class);

System.out.println(index);

}

}

java 反射 asm,Java反射工具包reflectasm相关推荐

  1. Java的反射作用_java反射机制的作用与优点

    java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码 ...

  2. Java面试题——Java反射

    42. 什么是反射?反射的应用场景? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调 ...

  3. java 提高反射性能_java反射性能

    项目中用到了java的反射,可以大大减少代码量.但是反射的性能却不容乐观,做了个简单的测试,如下. public void noreflect() { Person p = new Person(); ...

  4. java 内省机制_Java反射及 IoC原理、内省机制

    JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...

  5. Java 反射 (快速了解反射)

    反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...

  6. java 反射代价_Java反射机制

    # 反射 ## 什么是反射 反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法.. 静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行 ...

  7. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

  8. java 反射机制_Java反射机制原理探究

    反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...

  9. Java中为什么需要反射?反射要解决什么问题?

    Java中为什么需要反射?反射要解决什么问题? 参考文章: (1)Java中为什么需要反射?反射要解决什么问题? (2)https://www.cnblogs.com/buoge/p/9285142. ...

最新文章

  1. 洛谷P1092 虫食算
  2. Golang 匿名结构体及测试代码编写技巧
  3. redis php扩展 linux,linux下为php安装redis扩展phpredis
  4. 函数节流之debounce
  5. 如何用纯 CSS 创作背景色块变换的按钮特效
  6. selenium 无法启动IE浏览器的解决方法
  7. 3700打印机和计算机连接,WNDR3700成功实现打印机服务器功能(刷机成WNDR3800)
  8. android bugly 错误分析,使用 Robolectric 单元测试运行时 bugly 初始化异常
  9. php制作闹钟,简易闹钟 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
  10. 评价——秩和比综合评价
  11. unity显示FPS
  12. Spring Cloud 全家桶简介
  13. 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
  14. 为什么HDMI连接显示器无信号?
  15. 2019ROS暑期学校之如故如新
  16. Windows磁盘管理(虚拟磁盘)
  17. 如何用谷歌地球预览测区地形起伏变化高程值?
  18. 我是通过自学C语言转做软件开发工作的,后来用C++、JavaScript、Java、Scala、OC等语言,也都是自学。我觉得,自学一门编程语言,遵循下面的步骤比较容易学会:
  19. 股票卖出技巧及原则,你了解哪些
  20. python写闲鱼脚本_你想要的闲鱼日常操作,Python 给你实现了

热门文章

  1. python字典示例简单代码_python学习笔记:字典的使用示例详解
  2. iis服务器发布web项目,webservice创建、发布及在IIS上部署
  3. 计算机安全知识讲座,计算机学院安全知识讲座:防火防电防诈骗 人身安全记心间...
  4. oracle大黑点,R语言实现交通行业事故案例之黑点确定 - 数据分析
  5. pip 安装GDAL
  6. 光电整纬机(日本世联电子株式会社)
  7. Halcon例程学习:print_check.hev(光学字符检测)
  8. 又一款iPhone病毒来袭:针对中国用户
  9. 培训前5分钟时间写的抽查考试的程序
  10. opencv linux 编译好,linux下编译opencv