ITEEDU

BeanUtils

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