<!-- 反射工具 -->
<dependency>
   <groupId>org.db4j</groupId>
   <artifactId>reflectasm</artifactId>
   <version>1.11.4-2</version>
</dependency>
import com.alibaba.fastjson.JSON;
import com.ibase4jTest.core.utils.InstanceUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * Created by Administrator on 2018/1/28.
 */
public class BaseProviderImpl implements BaseProvider, ApplicationContextAware {private final Logger logger = LogManager.getLogger();

    private ApplicationContext applicationContext;

    public Parameter excute(Parameter parameter) {logger.info("{} request :{}",parameter.getNo(), JSON.toJSONString(parameter));
        Object result =  InstanceUtil.invokeMethod(applicationContext.getBean(parameter.getService()),parameter.getMethod(),parameter.getParam());
        parameter.setResult(result);
        logger.info("{} response :{}",parameter.getNo(),JSON.toJSONString(parameter));
        return parameter;
    }public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext =applicationContext;
    }
}
import com.alibaba.fastjson.JSON;
import com.esotericsoftware.reflectasm.MethodAccess;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Vector;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import top.ibase4j.core.exception.DataParseException;
import top.ibase4j.core.exception.InstanceException;
import top.ibase4j.core.util.TypeParseUtil;

public final class InstanceUtil {protected static Logger logger = LogManager.getLogger();
    public static Map<String, Class<?>> clazzMap = new HashMap();
    public static Map<String, MethodAccess> methodMap = new HashMap();

    private InstanceUtil() {}public static final <T> T to(Object orig, Class<T> clazz) {Object bean = null;

        try {bean = clazz.newInstance();
            Class e = orig.getClass();
            BeanInfo orgInfo = Introspector.getBeanInfo(e);
            PropertyDescriptor[] orgPty = orgInfo.getPropertyDescriptors();
            HashMap propertyMap = newHashMap();
            PropertyDescriptor[] beanInfo = orgPty;
            int propertyDescriptors = orgPty.length;

            for(int var9 = 0; var9 < propertyDescriptors; ++var9) {PropertyDescriptor property = beanInfo[var9];
                propertyMap.put(property.getName(), property);
            }BeanInfo var19 = Introspector.getBeanInfo(clazz);
            PropertyDescriptor[] var20 = var19.getPropertyDescriptors();
            PropertyDescriptor[] var21 = var20;
            int var22 = var20.length;

            for(int var11 = 0; var11 < var22; ++var11) {PropertyDescriptor property1 = var21[var11];
                String key = property1.getName();
                if(!key.equals("class") && propertyMap.containsKey(key)) {Method getter = ((PropertyDescriptor)propertyMap.get(key)).getReadMethod();
                    Method setter = property1.getWriteMethod();

                    try {Object e1 = TypeParseUtil.convert(getter.invoke(orig, new Object[0]), property1.getPropertyType(), (String)null);
                        setter.invoke(bean, new Object[]{e1});
                    } catch (Exception var17) {logger.error("to Error " + var17);
                    }}}} catch (Exception var18) {logger.error("to Error " + var18);
        }return bean;
    }public static final <T> T parse(String json, Class<T> clazz) {try {Map e = (Map)JSON.parseObject(json, Map.class);
            return transMap2Bean(e, clazz);
        } catch (Exception var3) {logger.error("parse", var3);
            return null;
        }}public static <T> T transMap2Bean(Map<String, Object> map, Class<T> clazz) {Object bean = null;

        try {bean = clazz.newInstance();
            BeanInfo e = Introspector.getBeanInfo(clazz);
            PropertyDescriptor[] propertyDescriptors = e.getPropertyDescriptors();
            PropertyDescriptor[] var5 = propertyDescriptors;
            int var6 = propertyDescriptors.length;

            for(int var7 = 0; var7 < var6; ++var7) {PropertyDescriptor property = var5[var7];
                String key = property.getName();
                if(map.containsKey(key)) {Object value = map.get(key);
                    Method setter = property.getWriteMethod();
                    setter.invoke(bean, new Object[]{TypeParseUtil.convert(value, property.getPropertyType(), (String)null)});
                }}} catch (Exception var12) {logger.error("transMap2Bean Error ", var12);
        }return bean;
    }public static Map<String, Object> transBean2Map(Object obj) {HashMap map = newHashMap();
        if(obj == null) {return map;
        } else {try {BeanInfo e = Introspector.getBeanInfo(obj.getClass());
                PropertyDescriptor[] propertyDescriptors = e.getPropertyDescriptors();
                PropertyDescriptor[] var4 = propertyDescriptors;
                int var5 = propertyDescriptors.length;

                for(int var6 = 0; var6 < var5; ++var6) {PropertyDescriptor property = var4[var6];
                    String key = property.getName();
                    if(!key.equals("class")) {Method getter = property.getReadMethod();
                        Object value = getter.invoke(obj, new Object[0]);
                        map.put(key, value);
                    }}} catch (Exception var11) {logger.error("transBean2Map Error " + var11);
            }return map;
        }}public static <T> T getDiff(T oldBean, T newBean) {if(oldBean == null && newBean != null) {return newBean;
        } else if(newBean == null) {return null;
        } else {Class cls1 = oldBean.getClass();

            try {Object e = cls1.newInstance();
                BeanInfo beanInfo = Introspector.getBeanInfo(cls1);
                PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
                PropertyDescriptor[] var6 = propertyDescriptors;
                int var7 = propertyDescriptors.length;

                for(int var8 = 0; var8 < var7; ++var8) {PropertyDescriptor property = var6[var8];
                    String key = property.getName();
                    if(!key.equals("class")) {Method getter = property.getReadMethod();
                        Method setter = property.getWriteMethod();
                        Object oldValue = getter.invoke(oldBean, new Object[0]);
                        Object newValue = getter.invoke(newBean, new Object[0]);
                        if(setter != null && newValue != null && !newValue.equals(oldValue)) {setter.invoke(e, new Object[]{newValue});
                        }}}return e;
            } catch (Exception var15) {throw new DataParseException(var15);
            }}}public static final Class<?> getClass(String clazz) {ClassLoader loader = Thread.currentThread().getContextClassLoader();

        try {return loader != null?Class.forName(clazz, true, loader):Class.forName(clazz);
        } catch (ClassNotFoundException var3) {throw new InstanceException(var3);
        }}public static final <E> List<E> getInstanceList(Class<E> cls, List<?> list) {ArrayList resultList = newArrayList();
        Object object = null;
        Iterator iterator = list.iterator();

        while(iterator.hasNext()) {Map map = (Map)iterator.next();
            object = newInstance(cls, new Object[]{map});
            resultList.add(object);
        }return resultList;
    }public static final <E> List<E> getInstanceList(Class<E> cls, ResultSet rs) {ArrayList resultList = newArrayList();

        try {Object e = cls.newInstance();
            Field[] fields = cls.getDeclaredFields();

            while(rs.next()) {e = cls.newInstance();

                for(int i = 0; i < fields.length; ++i) {String fieldName = fields[i].getName();
                    PropertyUtils.setProperty(e, fieldName, rs.getObject(fieldName));
                }resultList.add(e);
            }return resultList;
        } catch (Exception var7) {throw new InstanceException(var7);
        }}public static final <E> E newInstance(Class<E> cls, Map<String, ?> map) {Object object = null;

        try {object = cls.newInstance();
            BeanUtils.populate(object, map);
            return object;
        } catch (Exception var4) {throw new InstanceException(var4);
        }}public static final Object newInstance(String clazz) {try {return getClass(clazz).newInstance();
        } catch (Exception var2) {throw new InstanceException(var2);
        }}public static final <K> K newInstance(Class<K> cls, Object... args) {try {Class[] e = null;
            if(args != null) {e = new Class[args.length];
                int cons = 0;

                for(int j = args.length; cons < j; ++cons) {e[cons] = args[cons].getClass();
                }}Constructor var6 = cls.getConstructor(e);
            return var6.newInstance(args);
        } catch (Exception var5) {throw new InstanceException(var5);
        }}public static final Object newInstance(String className, Object... args) {try {Class e = (Class)clazzMap.get(className);
            if(e == null) {e = Class.forName(className);
                clazzMap.put(className, e);
            }return newInstance(e, args);
        } catch (Exception var3) {throw new InstanceException(var3);
        }}public static final Object invokeMethod(Object owner, String methodName, Object... args) {Class ownerClass = owner.getClass();
        String key = null;
        if(args != null) {Class[] methodAccess = new Class[args.length];
            int i = 0;

            for(int j = args.length; i < j; ++i) {if(args[i] != null) {methodAccess[i] = args[i].getClass();
                }}key = ownerClass + "_" + methodName + "_" + StringUtils.join(methodAccess, ",");
        } else {key = ownerClass + "_" + methodName;
        }MethodAccess var8 = (MethodAccess)methodMap.get(key);
        if(var8 == null) {var8 = MethodAccess.get(ownerClass);
            methodMap.put(key, var8);
        }return var8.invoke(owner, methodName, args);
    }public static final <E> ArrayList<E> newArrayList() {return new ArrayList();
    }public static final <E> ArrayList<E> newArrayList(E... e) {ArrayList list = new ArrayList();
        Collections.addAll(list, e);
        return list;
    }public static final <k, v> HashMap<k, v> newHashMap() {return new HashMap();
    }public static final <E> HashSet<E> newHashSet() {return new HashSet();
    }public static final <k, v> Hashtable<k, v> newHashtable() {return new Hashtable();
    }public static final <k, v> LinkedHashMap<k, v> newLinkedHashMap() {return new LinkedHashMap();
    }public static final <E> LinkedHashSet<E> newLinkedHashSet() {return new LinkedHashSet();
    }public static final <E> LinkedList<E> newLinkedList() {return new LinkedList();
    }public static final <k, v> TreeMap<k, v> newTreeMap() {return new TreeMap();
    }public static final <E> TreeSet<E> newTreeSet() {return new TreeSet();
    }public static final <E> Vector<E> newVector() {return new Vector();
    }public static final <k, v> WeakHashMap<k, v> newWeakHashMap() {return new WeakHashMap();
    }public static final <k, v> HashMap<k, v> newHashMap(k key, v value) {HashMap map = newHashMap();
        map.put(key, value);
        return map;
    }public static final <k, v> LinkedHashMap<k, v> newLinkedHashMap(k key, v value) {LinkedHashMap map = newLinkedHashMap();
        map.put(key, value);
        return map;
    }public static final <k, v> ConcurrentHashMap<k, v> newConcurrentHashMap() {return new ConcurrentHashMap();
    }
}

reflectasm --反射工具相关推荐

  1. 反射工具类 java_Java反射工具类

    importjava.lang.reflect.Field;importjava.lang.reflect.Method;/*** Java反射工具类 * 提供以下几个功能: * 1. 取最简类名 * ...

  2. Atitit apache 和guava的反射工具

    Atitit apache 和guava的反射工具 apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache  34             7 ...

  3. 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )

    Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...

  4. 反射工具类ReflectionUtils

    为什么80%的码农都做不了架构师?>>>    package net.pm.common.toolkit;import java.lang.reflect.Field; impor ...

  5. 反射工具类,如斯优雅

    Foreword 反射的作用我在这就不多说了,每次用到反射都是那么一坨代码丢进去,总是让人觉得很不优雅,如今有了我这个反射工具类,那么大家就可以一句话优雅地来完成反射的工作,该工具类是站在 jOOR ...

  6. 【java reflection】反射工具类总结

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  7. 反射工具-ReflectUtil

    反射工具-ReflectUtil 1 介绍 2 使用 2.1 获取构造方法 2.2 获取字段 2.3 获取字段值 2.4 获取方法 2.5 执行方法 1 介绍 Java的反射机制,可以让语言变得更加灵 ...

  8. Java反射工具:Reflections

    反射作为Java的高级特性之一,通过它,我们可以在程序的运行期间动态地去操作类的属性或方法.相比于直接调用,反射调用的执行速度会偏慢,所以不建议在常规的业务代码中使用.但是因其灵活性和扩展性比较高,往 ...

  9. java reflections_java反射工具Reflections用法

    java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...

最新文章

  1. R Learnilng 十八讲7-12
  2. perl编程(基本语法 数据 类型)
  3. 一个write和printf混用的例子
  4. SAP ECC 6.0有哪些增强功能
  5. [BZOJ1419] Red is good(期望DP)
  6. IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString
  7. vbox虚拟系统和主系统自动挂载共享文件夹
  8. awk 匹配_20分钟降服awk
  9. linux 内核修炼之道——系统调用
  10. C# 数组比较--取得两个集合的交集,差集,并集的方法
  11. 【算法】非线性动力学混沌、分岔图、最大李雅普诺夫指数等
  12. Java内存模型——《深入理解Java虚拟机》笔记
  13. CHK文件恢复工具v2.0绿色版
  14. 软件测试员最核心的竞争力究竟是什么
  15. PS--人物皮肤处理流程(一)
  16. Dynamic Head: Unifying Object Detection Heads with Attentions论文阅读
  17. 从 Google Play 下载 APK 文件
  18. PTA 1088三人行
  19. 初玩《剑与家园》体验和对游戏设计的一些思考
  20. 开启mybatis属性使用驼峰的命名

热门文章

  1. Ubuntu和window10 安装双系统
  2. c# 在winform中为DataGridView头部标题添加ContextMenuStrip菜单
  3. 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别...
  4. laravel contains 的用法
  5. Codevs 1043 方格取数
  6. 边工作边刷题:70天一遍leetcode: day 11-1
  7. 2015-04-11一些知识点
  8. Jquery Ajax +.ashx XML数据格式
  9. java 获取端口号错误_尝试访问SPYDER中的pyspark时,获取错误“异常:Java网关进程在向驱动程序发送其端口号之前已退出”...
  10. linux qt3编译出错,Linux下编译Qt 5版本源码