Java学习笔记之<反射、内省、BeanUtils包操作JavaBean的对比>

public class Demo {

	public static void main(String[] args) throws Exception {
		//获取Class对象
		Class<?> c = Class.forName("com.qq.java.javabean.Student");
		//获取Constructor对象
		Constructor<?> constructor = c.getConstructor();
		Student stu = (Student) constructor.newInstance();
	
		/*通过反射机制来设置读取JavaBean的属性*/
		Method m = c.getMethod("setName",String.class);
		m.invoke(stu, "Jack");
		m = c.getMethod("getName");
		System.out.println(m.invoke(stu));
		
		
		/*使用内省机制*/
		//获取BeanInfo(封装了JavaBean属性的)
		BeanInfo beanInfo = Introspector.getBeanInfo(c);
		//属性描述器
		PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
		String property = null;
		for (PropertyDescriptor pd : pds) {
			if (!(property = pd.getName()).equals("class")) {
				Method m2 = pd.getWriteMethod();  //获取setXX的方法
				if (property.equals("name")) {
					m2.invoke(stu, "LiLi");
				}
				Method m3 = pd.getReadMethod();  //获取getXX的方法
				if (property.equals("name")) {
					System.out.println(m3.invoke(stu));
				}
				
			}
		}
		
		/*使用BeanUtils包,一般Utils包里面的方法都是静态的*/
		BeanUtils.setProperty(stu, "name", "Wang wu");
		System.out.println(BeanUtils.getProperty(stu, "name"));
		/*由上面可以看到用BeanUtils包非常方便*/
		
		
	}

}



因为JavaBean是一个具有public的无参构造方法,私有属性,提供getXX(),setXX()方法的类,所以操作的也是getXX,setXX  

用BeanUtils能较为方便的操作JavaBean。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值