<!-- 反射工具 -->
<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();
}
}