贴上解决我自己问题的代码,当然还有其它方式,见文章后面的总结
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.springframework.cglib.beans.BeanGenerator;
import org.springframework.cglib.beans.BeanMap;
public class DynamicDto {
public DynamicDto() {
super();
}
/**
* 目标对象
*/
private Object target;
/**
* 属性集合
*/
private BeanMap beanMap;
@SuppressWarnings("unchecked")
public void init(Map propertyMap) {
this.target = generateBean(propertyMap);
this.beanMap = BeanMap.create(this.target);
}
/**
* 给bean属性赋值
* @param property 属性名
* @param value 值
*/
public void setValue(String property, Object value) {
beanMap.put(property, value);
}
/**
* 通过属性名得到属性值
* @param property 属性名
* @return 值
*/
public Object getValue(String property) {
return beanMap.get(property);
}
/**
* 得到该实体bean对象
* @return
*/
public Object getObject() {
return this.target;
}
@SuppressWarnings("unchecked")
private Object generateBean(Map propertyMap) {
BeanGenerator generator = new BeanGenerator();
Set keySet = propertyMap.keySet();
for (Iterator i = keySet.iterator(); i.hasNext();) {
String key = (String) i.next();
generator.addProperty(key, (Class) propertyMap.get(key));
}
return generator.create();
}
使用方法:先调用init方法进行初始化,然后再对属性进行setValue
主要技巧:就是javabean和map之间的一个转换,相关功能的jar如:
1、 net.sf.cglib.beans.BeanMap
2、 org.springframework.cglib.beans.BeanMap
3、Apache BeanUtils
可能还有其它的,这里就不赘述了。
来源:oschina
链接:https://my.oschina.net/osokra/blog/4338285