反射Java,java 反射 asm,Java反射工具包reflectasm

 2023-11-11 阅读 29 评论 0

摘要:1、com.esotericsoftware反射Java。reflectasm1.11.91、實體類java cglib、package com.redisson;/*** @Description TODOjava listener。* @Date 2020/7/28 13:41* @Author zsj*/jdbc工具包、public class Person {public int age;public String name;public int

1、

com.esotericsoftware

反射Java。reflectasm

1.11.9

1、實體類

java cglib、package com.redisson;

/**

* @Description TODO

java listener。* @Date 2020/7/28 13:41

* @Author zsj

*/

jdbc工具包、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);

}

}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/170628.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息