java 反射 asm,Java反射工具包reflectasm
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相关推荐
- Java的反射作用_java反射机制的作用与优点
java的反射机制就是增加程序的灵活性,避免将程序写死到代码里, 例如: 实例化一个 person()对象, 不使用反射, new person(); 如果想变成 实例化 其他类, 那么必须修改源代码 ...
- Java面试题——Java反射
42. 什么是反射?反射的应用场景? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调 ...
- java 提高反射性能_java反射性能
项目中用到了java的反射,可以大大减少代码量.但是反射的性能却不容乐观,做了个简单的测试,如下. public void noreflect() { Person p = new Person(); ...
- java 内省机制_Java反射及 IoC原理、内省机制
JAVA反射及IoC原理.JAVA内省 1. 反射反射是框架设计的灵魂,使用前提:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码文件). 1.1 反射概述主要指程序可 ...
- Java 反射 (快速了解反射)
反射的概念 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java ...
- java 反射代价_Java反射机制
# 反射 ## 什么是反射 反射是Java提供的动态执行机制, 可以动态加载类, 动态创建对象, 动态访问属性, 动态调用方法.. 静态执行: Java代码经过编译以后就确定的执行次序, 称为静态执行 ...
- java 泛型反射_Java使用反射来获取泛型信息示例
本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...
- java 反射机制_Java反射机制原理探究
反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象.获取对象属性以及调用对象方法.与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一 ...
- Java中为什么需要反射?反射要解决什么问题?
Java中为什么需要反射?反射要解决什么问题? 参考文章: (1)Java中为什么需要反射?反射要解决什么问题? (2)https://www.cnblogs.com/buoge/p/9285142. ...
最新文章
- 洛谷P1092 虫食算
- Golang 匿名结构体及测试代码编写技巧
- redis php扩展 linux,linux下为php安装redis扩展phpredis
- 函数节流之debounce
- 如何用纯 CSS 创作背景色块变换的按钮特效
- selenium 无法启动IE浏览器的解决方法
- 3700打印机和计算机连接,WNDR3700成功实现打印机服务器功能(刷机成WNDR3800)
- android bugly 错误分析,使用 Robolectric 单元测试运行时 bugly 初始化异常
- php制作闹钟,简易闹钟 - 按键精灵资源站 按键精灵教程,学习脚本制作,脚本大全,视频教程...
- 评价——秩和比综合评价
- unity显示FPS
- Spring Cloud 全家桶简介
- 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
- 为什么HDMI连接显示器无信号?
- 2019ROS暑期学校之如故如新
- Windows磁盘管理(虚拟磁盘)
- 如何用谷歌地球预览测区地形起伏变化高程值?
- 我是通过自学C语言转做软件开发工作的,后来用C++、JavaScript、Java、Scala、OC等语言,也都是自学。我觉得,自学一门编程语言,遵循下面的步骤比较容易学会:
- 股票卖出技巧及原则,你了解哪些
- python写闲鱼脚本_你想要的闲鱼日常操作,Python 给你实现了
热门文章
- python字典示例简单代码_python学习笔记:字典的使用示例详解
- iis服务器发布web项目,webservice创建、发布及在IIS上部署
- 计算机安全知识讲座,计算机学院安全知识讲座:防火防电防诈骗 人身安全记心间...
- oracle大黑点,R语言实现交通行业事故案例之黑点确定 - 数据分析
- pip 安装GDAL
- 光电整纬机(日本世联电子株式会社)
- Halcon例程学习:print_check.hev(光学字符检测)
- 又一款iPhone病毒来袭:针对中国用户
- 培训前5分钟时间写的抽查考试的程序
- opencv linux 编译好,linux下编译opencv