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; } }