bean 的内省

 
package AdvanceJava;
import static java.lang.System.out;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
public class BeanProperty {
	
	public static void main(String args[]) throws Exception
	{
		Bean bean = new Bean();
		bean.setName("boy");
		out.println(getProperty(bean,"name"));
		setProperty(bean,"name","girl");
		out.println(getProperty(bean,"name"));
	}
	/*
	 * 	 javaBean 的内省(提供直接操作bean 的一些方法,另外还有一个开源的包,也是操作bean的,名:beanUtil)
	 * 	 给定一个属性 x,给出操作这个属性的方法 
	 * */
	// 下面先用反射试一下
	public static Object reflectGetProperty(Object obj,String property) throws Exception
	{
		// 因为getter setter属性的第一个字符是大写
		/*
		 * 	通过反射先得到根据传入的对象与属性得到这个属性的getter 方法,然后
		 * 	调用这具方法的invoke 方法进行操作
		 */
		String pro = Character.toUpperCase(property.charAt(0))+property.substring(1,property.length());
		Method getter = obj.getClass().getMethod("get"+pro);
		Object retVal = getter.invoke(obj);
		return retVal;
		//Method m = obj.getClass().getMethod("get", parameterTypes)
	}
	public static Object getProperty(Object obj,String property) throws Exception
	{
		Object retVal = null; 
		//PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。
		PropertyDescriptor prodesc = new PropertyDescriptor(property,obj.getClass());
		Method getter = prodesc.getReadMethod();
		retVal = getter.invoke(obj);
		return retVal;
	}
	public static void setProperty(Object obj,String property,Object value) throws Exception
	{
			// 通过属性与  bean 的类型得到一个 该属性的描述性类
				//里面有这个属性的 setter getter 方法
		PropertyDescriptor prodesc = new PropertyDescriptor(property,obj.getClass());
		Method setter = prodesc.getWriteMethod();
		setter.invoke(obj, value);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值