最近在开发项目中碰到需要动态写bean的问题,于是就拿出来和大家分享一下。
用到的是net.lib.cglib.jar
自己写的Utils类
public class GeneralCglibBean {
private BeanMap beanMap = null;
//propertyMap必须是String和String,前者表示bean的属性名,后者为bean的属性类型
//eg:public String name;则propertyMap.put("name","java.lang.String");
//如果是int等基本类型,则使用它的扩展类,比如Integer。
public GeneralCglibBean(Map<String, String> propertyMap) throws ClassNotFoundException{
this.CreateGenaralBean(propertyMap);
}
private void CreateGenaralBean(Map<String, String> propertyMap) throws ClassNotFoundException{
BeanGenerator beanGenerator = new BeanGenerator();
Set<String> keySet = propertyMap.keySet();
for(Iterator<String> i = keySet.iterator();i.hasNext();){
String key = (String)i.next();
beanGenerator.addProperty(key, (Class<?>)Class.forName(propertyMap.get(key)));
}
Object genaralBean = beanGenerator.create();
this.beanMap = BeanMap.create(genaralBean);
}
//设值
public void setValue(String property, Object value){
beanMap.put(property, value);
}
//取值
public Object getValue(String property){
return beanMap.get(property);
}
}
使用方法如下:
public class TestGeneralCglibBean {
public static void main(String[] args) {
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap.put("id", "java.lang.Integer");
propertyMap.put("name", "java.lang.String");
GeneralCglibBean bean = null;
try {
bean = new GeneralCglibBean(propertyMap);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
bean.setValue("id", 1);
bean.setValue("name", "huang");
System.out.println("Id:"+(Integer)bean.getValue("id")+" Name:"+(String)bean.getValue("name"));
}
}
输出结果:
Id:1 Name:huang
如果需要动态生成,则加个循环即可。存入List。当碰到这样的需求时,就不用每个table都写一个bean了。