在j2ee的架构中,dao层把数据取出注入实体类,这样操作数据更具有面向对象的思想。下面我查了相关资料,写的一个简单的数据注入实体类的工具类。里面我直接用的List,效率可能不是很高,大家可以自己改成数组,这样效率会高很多。 package wsk.utils; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import org.apache.log4j.Logger; /** * <p> * 完成数据注入实体类的功能 * </p> * * @author 懒人-小何 * @version 2009-12-6 */ public final class ReflectionUtils { private static final Logger logger = Logger.getLogger(ReflectionUtils .class); /** * <p> * 注入数据 * </p> * * @param obj * @param paramName * @param value */ public final static void register(Object obj, String paramName, String value) { Class<?> clazz = obj.getClass(); Method[] methods = clazz.getMethods();// 返回这个类里面方法的集合 char[] ch = paramName.toCharArray(); ch[0] = Character.toUpperCase(ch[0]); String s = new String(ch); String[] names = new String[] { ("set" + s).intern(), ("get" + s).intern(), ("is" + s).intern(), ("read" + s).intern() }; Method setter = null; Method getter = null; int length = methods.length; for (int i = 0; i < length; ++i) { Method method = methods[i]; /** * 检查该方法是否为公共方法,如果非公共方法就继续 */ if (!Modifier.isPublic(method.getModifiers())) continue; String methodName = method.getName(); for (String name : names) { if (name.equals(methodName)) { if (name.startsWith("set") || name.startsWith("read")) setter = method; else if (name.startsWith("get") || name.startsWith("is")) getter = method; } } } Object[] param = buildParam(getter.getReturnType().getName(), value); try { setter.invoke(obj, param); } catch (Exception e) { e.printStackTrace(); logger.error("数据注入失败:" + e.getMessage()); } } /** * <p> * 构造注入数据的参数 * </p> * * @param paramType * @param value * @return Object[] */ private final static Object[] buildParam(String paramType, String value) { Object[] param = new Object[1]; if (paramType.equalsIgnoreCase("java.lang.String")) { param[0] = new String(value); } else if (paramType.equalsIgnoreCase("int") || paramType.equalsIgnoreCase("Integer")) { param[0] = new Integer(value); } else if (paramType.equalsIgnoreCase("long")) { param[0] = new Long(value); } else if (paramType.equalsIgnoreCase("double")) { param[0] = new Double(value); } else if (paramType.equalsIgnoreCase("float")) { param[0] = new Float(value); } else if (paramType.equalsIgnoreCase("char") || paramType.equalsIgnoreCase("Character")) { param[0] = Character.valueOf(value.charAt(0)); } return param; } // public static void main(String[] args) throws InstantiationException, // IllegalAccessException, IllegalArgumentException, // InvocationTargetException { // Object obj = Login.class.newInstance(); // ReflectionUtils.register(obj, "sex", "男"); // // }