何谓反射:能够分析类能力的程序。
反射机制的应用:在运行时分析类的能力、在运行时查看对象、实现数组的操作代码、利用Method对象。反射是一种功能强大且复杂的机制,使用它的对象是 工具的构造者。时间应用如下:
输出:(sex,address,name) values(?,?,?)
反射机制的应用:在运行时分析类的能力、在运行时查看对象、实现数组的操作代码、利用Method对象。反射是一种功能强大且复杂的机制,使用它的对象是 工具的构造者。时间应用如下:
public class DaoUtil {
/**
* eg. insert into student(name,age) values(?,?)
*
* @param vo
* @param paramValues
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws InvocationTargetException
*/
public static String getInsertSQLFromVO(Object vo, List paramValues)
throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
// 保存字段的名称
StringBuilder fieldNames = new StringBuilder("(");
// 保存参数中的问号 “?”
StringBuilder fieldParams = new StringBuilder(" values(");
Class type = vo.getClass();
// 根据对象vo的类型获取改对象中的所有public的方法
Method[] methods = type.getMethods();
for (Method method : methods) {
String methodName = method.getName();
System.out.println(methodName);
// 把get***的方法获取到
if (methodName.startsWith("get") && !"getId".equals(methodName)
&& !"getClass".equals(methodName)) {
String fieldName = methodName.substring(3).toLowerCase();
System.out.println(fieldName);
// 通过方法调用自己,来获取到对象中的指定的fieldName的属性值。
Object fieldVal ;
fieldVal = method.invoke(vo, null);
fieldNames.append(fieldName + ",");
fieldParams.append("?,");
// 把对象中的属性值加入到paramValues参数List中。
paramValues.add(fieldVal);
}
}
fieldNames.deleteCharAt(fieldNames.length() - 1);
fieldParams.deleteCharAt(fieldParams.length() - 1);
// 返回的就是类似这样的一个字符串: (name,age) values(?,?),这个时候paramValues也完成了初始化。
return fieldNames.append(")" + fieldParams.toString() + ")").toString();
}
public static void main(String[]args) throws InvocationTargetException{
User user = new User();
user.setId("1");
user.setName("lizh");
user.setAddress("xi'an");
try {
System.out.print(getInsertSQLFromVO(user,new ArrayList()));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
输出:(sex,address,name) values(?,?,?)