maven依赖:
commons-beanutils
commons-beanutils
1.9.3
cglib
cglib-nodep
3.2.4
DynamicBeanEntity.class动态bean类:
package com.dym.entity;
import net.sf.cglib.beans.BeanGenerator;
import org.apache.commons.collections.map.MultiValueMap;
import java.lang.reflect.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @author: zhaoxu
* @description:
*/
public class DynamicBeanEntity {
Object dynamicBean;
Class clazz;
public DynamicBeanEntity(Map dynAttrMap) {
this.dynamicBean = generateBean(dynAttrMap);
clazz = dynamicBean.getClass();
}
/**
* 获取所有属性值
*
* @return
* @throws IllegalAccessException
*/
public Map getValues() throws IllegalAccessException {
Map fieldValuesMap = new HashMap(16);
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object fieldValue = field.get(dynamicBean);
fieldValuesMap.put(field.getName().split("\$cglib_prop_")[1], fieldValue);
}
return fieldValuesMap;
}
/**
* 获取动态bean所有方法信息
*
* @return
*/
public MultiValueMap getMethods() {
MultiValueMap map = new MultiValueMap();
Method[] methods = clazz.getMethods();
for (Method method : methods) {
Type[] genericParameterTypes = method.getGenericParameterTypes();
if (genericParameterTypes.length > 0) {
for (Type type : genericParameterTypes) {
map.put(method.getName(), type);
}
} else {
map.put(method.getName(), null);
}
}
return map;
}
/**
* 执行某个方法
*
* @param methodName
* @param parameters
* @return
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws NoSuchMethodException
*/
public Object executeMethod(String methodName, Object... parameters) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
ArrayList paramTypeList = new ArrayList();
for (Object paramType : parameters) {