reflectasm --反射工具
<!-- 反射工具 --> <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 --反射工具相关推荐
- 反射工具类 java_Java反射工具类
importjava.lang.reflect.Field;importjava.lang.reflect.Method;/*** Java反射工具类 * 提供以下几个功能: * 1. 取最简类名 * ...
- Atitit apache 和guava的反射工具
Atitit apache 和guava的反射工具 apache1 Spring的反射工具类 ReflectionUtils1 Guava 反射工具2 apache 34 7 ...
- 【Android 插件化】Hook 插件化框架 ( 反射工具类 | 反射常用操作整理 )
Android 插件化系列文章目录 [Android 插件化]插件化简介 ( 组件化与插件化 ) [Android 插件化]插件化原理 ( JVM 内存数据 | 类加载流程 ) [Android 插件 ...
- 反射工具类ReflectionUtils
为什么80%的码农都做不了架构师?>>> package net.pm.common.toolkit;import java.lang.reflect.Field; impor ...
- 反射工具类,如斯优雅
Foreword 反射的作用我在这就不多说了,每次用到反射都是那么一坨代码丢进去,总是让人觉得很不优雅,如今有了我这个反射工具类,那么大家就可以一句话优雅地来完成反射的工作,该工具类是站在 jOOR ...
- 【java reflection】反射工具类总结
这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...
- 反射工具-ReflectUtil
反射工具-ReflectUtil 1 介绍 2 使用 2.1 获取构造方法 2.2 获取字段 2.3 获取字段值 2.4 获取方法 2.5 执行方法 1 介绍 Java的反射机制,可以让语言变得更加灵 ...
- Java反射工具:Reflections
反射作为Java的高级特性之一,通过它,我们可以在程序的运行期间动态地去操作类的属性或方法.相比于直接调用,反射调用的执行速度会偏慢,所以不建议在常规的业务代码中使用.但是因其灵活性和扩展性比较高,往 ...
- java reflections_java反射工具Reflections用法
java反射工具Reflections用法 一.引入maven依赖 org.reflections reflections 0.9.10 二.用法示例: reflections 中包含很多的Scann ...
最新文章
- R Learnilng 十八讲7-12
- perl编程(基本语法 数据 类型)
- 一个write和printf混用的例子
- SAP ECC 6.0有哪些增强功能
- [BZOJ1419] Red is good(期望DP)
- IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString
- vbox虚拟系统和主系统自动挂载共享文件夹
- awk 匹配_20分钟降服awk
- linux 内核修炼之道——系统调用
- C# 数组比较--取得两个集合的交集,差集,并集的方法
- 【算法】非线性动力学混沌、分岔图、最大李雅普诺夫指数等
- Java内存模型——《深入理解Java虚拟机》笔记
- CHK文件恢复工具v2.0绿色版
- 软件测试员最核心的竞争力究竟是什么
- PS--人物皮肤处理流程(一)
- Dynamic Head: Unifying Object Detection Heads with Attentions论文阅读
- 从 Google Play 下载 APK 文件
- PTA 1088三人行
- 初玩《剑与家园》体验和对游戏设计的一些思考
- 开启mybatis属性使用驼峰的命名
热门文章
- Ubuntu和window10 安装双系统
- c# 在winform中为DataGridView头部标题添加ContextMenuStrip菜单
- 二十二 Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别...
- laravel contains 的用法
- Codevs 1043 方格取数
- 边工作边刷题:70天一遍leetcode: day 11-1
- 2015-04-11一些知识点
- Jquery Ajax +.ashx XML数据格式
- java 获取端口号错误_尝试访问SPYDER中的pyspark时,获取错误“异常:Java网关进程在向驱动程序发送其端口号之前已退出”...
- linux qt3编译出错,Linux下编译Qt 5版本源码