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);
}
}
bean 的内省
最新推荐文章于 2024-06-27 15:41:00 发布