学习java 反射, User基础类
package com.test;
public class User {
private String name;
private String pwd;
private String realname;
private Integer userid;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getRealname() {
return realname;
}
public void setRealname(String realname) {
this.realname = realname;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public User(){}
public User(String name,String pwd,String realname,Integer userid){
this.name = name;
this.pwd = pwd;
this.realname = realname;
this.userid = userid;
}
public void login(String name,String pwd){
System.out.println("用户:"+this.name+" 密码:"+this.pwd+" 进行登录验证");
System.out.println("登录用户:"+name+" 登录密码:"+pwd);
}
public String say(String msg){
return "用户:"+name+" 说:“"+msg+"”";
}
public String showUser(){
return "用户:"+name+" 密码:"+pwd+" 真实姓名:"+realname+" 用户id:"+userid;
}
}
ReflectTest 反射类
package com.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectTest {
public static User ReflectTestMethod() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException{
//通过类装载器 和类路径获取user 对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.test.User");
//调用构造函数,实例化User
Constructor constr1 = clazz.getConstructor();
User user1 = (User)constr1.newInstance();
//赋值
Method setName = clazz.getMethod("setName", String.class);
setName.invoke(user1, "zs110000");
Method setPwd =clazz.getMethod("setPwd",String.class );
setPwd.invoke(user1, "123456");
return user1;
}
public static void main(String[] args) {
User user1;
try {
user1 = ReflectTest.ReflectTestMethod();
String msg = user1.showUser();
System.out.println(msg);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
通过反射 ,将数据库查询结果 resultset 放到 指定对象
protected Object fillClass(Class clazz, ResultSet res) {
try {
Field[] fls = clazz.getDeclaredFields();
Object obj = clazz.getConstructor().newInstance();
int columnCount = res.getMetaData().getColumnCount();
List<String> columns = new ArrayList<String>();
for (int i = 1; i <= columnCount; i++) {
columns.add(res.getMetaData().getColumnName(i));
}
for (Field fld : fls) {
String columnName = fld.getName().toUpperCase();
if (!columns.contains(columnName)) {
continue;
}
Method me = getSetMethod(clazz, fld.getName());
if ("java.lang.Long".equals(fld.getType().getName())) {
me.invoke(obj, res.getObject(fld.getName()) == null ? null
: res.getLong(fld.getName()));
} else if ("java.lang.String".equals(fld.getType().getName())) {
me.invoke(obj, res.getObject(fld.getName()) == null ? null
: res.getString(fld.getName()));
} else if ("java.lang.Integer".equals(fld.getType().getName())){
me.invoke(obj, res.getObject(fld.getName()) == null ? null
: res.getInt(fld.getName()));
}else if ("java.sql.Date".equals(fld.getType().getName())){
me.invoke(obj, res.getObject(fld.getName()) == null ? null
: res.getDate(fld.getName()));
}else {
throw new BussException("查询取值转化中未配置"
+ fld.getType().getName() + "的转化");
}
}
return obj;
} catch (Exception e) {
System.out.println("resultset 数据取值错误");
e.printStackTrace();
}
return null;
}