内省----javaBean
利用javaBean来获得某个sioux变量的值
ReflectPointpt1 = new ReflectPoint(3,4);
StringpropertyName = "x";
得到属性描述对象(属性名,javaBean类);javaBean类用字节码对象表示
PropertyDescriptorpd = new PropertyDescriptor(propertyName,pt1.getClass());
MethodmethodGetX = pd.getReadMethod();//得到get方法
ObjectretVal = methodGetX.invoke(pt1);
MethodmethodSetX = pd.getWriteMethod();//得到set方法
methodSetX。invoke(pt1,5);
第二种方法获得javaBean中的信息
根据对象获取该对象的javaBean信息
BeanInfobeanInfo = Introspector.getBeanInfo(pt1.getClass());
根据Bean信息对象获取属性集合
PropertyDescriptor[]pds = beanInfo.getPropertyDescriptor();
Objectretval = null;
for(PropertyDescriptorpd:pds){
if(pd.getName().equals(propertyName)){//找到属性
MethodmethodGetX = pd.getReadMethod()
retval = methodGetX.invoke(pt1);
break;
}
}
Beanutils工具包
得到bean对象中,属性为name的值
BeanUtils.getProperty(bean,name);
为bean对象的name属性设置value值
BeanUtils.setProperty(bean,name, value);
例如
classTest(){
privateDate d = new Date()//必须new
publicDate getDate(){
retrund;
}
publicvoid setDate(Date d){
this.d = d;
}
}
由于d是一个复合属性。
BeanUtils.setProperty(newTest(), "d.time", "111");
BeanUtils是以字符串对javaBean操作
PropertyUtils是以对应类型对javaBean操作
PropertyUtils.setProperty(pt1,"x", 4);
PropertyUtils.getProperty(pt1,"x").getClass().getName();java.lang.Integer
BeanUtils.getProperty(pt1,"x").getClass().getName();java.lang.String