packagecom.jts.test;importjava.lang.reflect.Method;importorg.junit.Test;importcom.esotericsoftware.reflectasm.ConstructorAccess;importcom.esotericsoftware.reflectasm.FieldAccess;importcom.esotericsoftware.reflectasm.MethodAccess;importcom.jts.service.UserService;public classAppTest {/*** JDK反射调用方法
*@throwsException*/@Testpublic void testJdkReflect() throwsException {
UserService userService= newUserService();long start =System.currentTimeMillis();
Method method= userService.getClass().getMethod("update", int.class, String.class);for (int i = 0; i < 100000000; i++) {
method.invoke(userService,1, "zhangsan");
}long end =System.currentTimeMillis();
System.out.println("timeout=" + (end - start));//809 753 880 875 816
}/*** ReflectAsm反射调用方法
* 用名称定位反射方法*/@Testpublic voidtestReflectAsm4Name() {
UserService userService= newUserService();
MethodAccess access= MethodAccess.get(UserService.class);//生成字节码的方式创建UserServiceMethodAccess
long start =System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {
access.invoke(userService,"update", 1, "zhangsan");
}long end =System.currentTimeMillis();
System.out.println("timeout=" + (end - start));//523 382 415 489 482
}/*** ReflectAsm反射调用方法
* 用方法和字段的索引定位反射方法,性能高*/@Testpublic voidtestReflectAsm4Index() {
UserService userService= newUserService();
MethodAccess access= MethodAccess.get(UserService.class);int index = access.getIndex("update", int.class, String.class);long start =System.currentTimeMillis();for (int i = 0; i < 100000000; i++) {
access.invoke(userService, index,1, "zhangsan");
}long end =System.currentTimeMillis();
System.out.println("timeout=" + (end - start));//12 15 23 14 24
}/*** ReflectAsm反射来set/get字段值*/@Testpublic voidtestFieldAccess() {
UserService target= newUserService();
FieldAccess fieldAccess=FieldAccess.get(target.getClass());
fieldAccess.set(target,"state", 1);int state = (Integer)fieldAccess.get(target, "state");
System.out.println(state);
}/*** ReflectAsm反射来调用构造方法*/@Testpublic voidtestConstructorAccess() {
ConstructorAccess constructorAccess = ConstructorAccess.get(UserService.class);
UserService userService=constructorAccess.newInstance();
System.out.println(userService);
}/*** 查找方法的索引*/@Testpublic voidtestIndex() {
UserService target= newUserService();
MethodAccess methodAccess=MethodAccess.get(target.getClass());int index = methodAccess.getIndex("update", int.class, String.class);
System.out.println(index);
}
}