import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public abstract class BeanUtils {
/**
* 生成set方法名
*
* @param field
* @return
*/
protected static String getSetterName(Field field) {
String fn = field.getName();
return "set"
+ fn.replaceFirst(fn.substring(0, 1), fn.substring(0, 1)
.toUpperCase());
}
/**
* 生成get方法名
*
* @param field
* @return
*/
protected static String getGetterName(Field field) {
String fn = field.getName();
return "get"
+ fn.replaceFirst(fn.substring(0, 1), fn.substring(0, 1)
.toUpperCase());
}
/**
* 给bean的field属性赋值,值为value 赋值用的是属性的对应set方法
*
* @param field
* 属性域
*
* @param value
* 对属性域要赋的值
*
* @param bean
* 赋值的实体对象
*/
protected static <T> void setFieldValue(Field field, Object value, T bean)
throws BeanException {
Method m = null;
// 指定方法参数类型列表
Class[] partypes = new Class[] { field.getType() };
try {
// 根据方法名和参数列表获取方法对象
m = bean.getClass().getMethod(getSetterName(field), partypes);
} catch (SecurityException e) {
throw new BeanException("setFieldValue获取Set方法:安全性错误", e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
// 没有对应的set方法就返回
return;
}
// 方法的参数列表
Object arglist[] = new Object[] { value };
try {
// 调用bean对象的m方法,参数为arglist
m.invoke(bean, arglist);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
throw new BeanException("setFieldValue执行Set方法:参数不合法错误", e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
throw new BeanException("setFieldValue执行Set方法:访问权限错误", e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
throw new BeanException("setFieldValue执行Set方法:调用不成功", e);
}
}
/**
* 获取对象指定属性的值,用get方法。
*
* @param bean
* @param field
* @return
* @throws BeanException
*/
protected static Object getFieldValue(Object bean, Field field)
throws BeanException {
Method m = null;
try {
// 根据方法名和参数列表获取方法对象
m = bean.getClass().getMethod(getGetterName(field), new Class[] {});
} catch (SecurityException e) {
throw new BeanException("getFieldValue获取Get方法:安全性错误", e);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
// 没有get方法不获取值
return null;
}
Object value = null;
try {
value = m.invoke(bean, new Object[] {});
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
throw new BeanException("getFieldValue执行Get方法:参数不合法错误", e);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
throw new BeanException("getFieldValue执行Get方法:访问权限错误", e);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
throw new BeanException("getFieldValue执行Get方法:调用不成功", e);
}
return value;
}
/**
* 生成bean实例
*
* @param bc
* @return
* @throws BeanException
*/
protected static <T> T newBeanByClass(Class<T> bc) throws BeanException {
T bean = null;
// 创建一个bean实例
try {
bean = bc.newInstance();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
throw new BeanException("创建Bean对象:访问不合法", e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
throw new BeanException("创建Bean对象:实例化错误", e);
}
return bean;
}
}