使用org.apache.commons.beanutils.BeanUtils 对类进行操作,需要对类进行实例化,如果要写一个通用的功能,则要实现动态实例化类,下面的例子
使用java反射机制对类进行实例化
首先是一个工具类,反射机制实现对属性赋值
public class ReflectMatch {
public static void fill(Object bean, Field field, Method method, Object value) {
if (value == null)
return;
try {
Object[] oo = new Object[1];
String type = field.getType().getName();
if ("java.lang.String".equals(type)) {
oo[0] = value;
} else if ("java.lang.Integer".equals(type)) {
value = (Integer) value;
oo[0] = value;
} else if ("java.lang.Float".equals(type)) {
value = (Float) value;
oo[0] = value;
} else if ("java.lang.Double".equals(type)) {
value = (Double) value;
oo[0] = value;
} else if ("java.math.BigDecimal".equals(type)) {
value = (BigDecimal) value;
oo[0] = value;
} else if ("java.util.Date".equals(type)) {
oo[0] = value;
} else if ("java.sql.Timestamp".equals(type)) {
oo[0] = value;
} else if ("java.lang.Boolean".equals(type)) {
value = (Boolean) value;
oo[0] = value;
} else if ("java.lang.Long".equals(type)) {
value = (Long) value;
oo[0] = value;
} else {
oo[0] = value;
}
method.invoke(bean, oo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
利用上面的工具类,实现对类的实例化
public Object instance(Object o) throws Exception { if (o == null) { o = o.getClass().newInstance(); } Field[] fields = getAllField(o); for (Field field : fields) { if (isLeaf(field)) { continue; } String filedName = field.getName().substring(1); Method[] methods = getAllMethod(o); for (Method me : methods) { String meth = me.getName(); if (meth != null && "set".equals(meth.substring(0, 3)) && Modifier.isPublic(me.getModifiers()) && ("set" + Character.toUpperCase(filedName.charAt(0)) + filedName.substring(1)).equals(meth)) { Object fieldObject = null; if (isType(field)) {// 这里实现对特殊类型的实例化 String className = field.getType().getName(); fieldObject = this.getTypeInstance(className); } else { fieldObject = field.getType().newInstance(); } ReflectMatch.fill(o, field, me, fieldObject); System.out.println(filedName); instance(fieldObject); break; } } } return o; }
这样就是先了类的实例化,就可以使用beanutils的api对 属性.属性.属性.属性进行赋值