java 反射


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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值