Java的内省技术与反射技术关系密切,内省机制是通过反射来实现的。
根据JavaBean对象,以及属性名,构造出PropertyDescriptor对象,
通过PropertyDescriptor对象的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值
public static void getProperty(UserInfo userInfo,String userName)throws Exception{
PropertyDescriptor proDescriptor = new PropertyDescriptor(userName,UserInfo.class);
Method methodGetUserName=proDescriptor.getReadMethod();
Object objUserName=methodGetUserName.invoke(userInfo);
System.out.println("get userName:"+objUserName.toString());
}
(2)通过Introspector,BeanInfo来获取或修改属性
根据Introspector的静态方法getBeanInfo,传入JavaBean的class对象,
得到BeanInfo对象,再根据BeanInfo的getPropertyDescriptors方法得到PropertyDescriptor数组,
遍历该数组,根据PropertyDescriptor的getName()方法得到的属性与要访问的属性进行匹配,
如果匹配上,调用PropertyDescriptor的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值
(3)导入第三方jar包,使用BeanUtils,PropertyUtils来访问或修改属性
BeanUtils工具包:下载:http://commons.apache.org/beanutils/
注意:应用的时候还需要一个logging包http://commons.apache.org/logging/
BeanUtils.setProperty()
BeanUtils.getProperty()
PropertyUtils.setProperty()
PropertyUtils.getProperty()
这两个工具设置属性的时候一个主要区别是:
PropertyUtils.getPropety方法获得的属性值的类型为 该属性本来的类型,
而BeanUtils.getProperty则是将该属性的值转换成字符串后才返回。
常用类:BeanInfo, Introspector,PropertyDescriptor,Class,Method,Field,Constructor等
根据JavaBean对象,以及属性名,构造出PropertyDescriptor对象,
通过PropertyDescriptor对象的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值
public static void getProperty(UserInfo userInfo,String userName)throws Exception{
PropertyDescriptor proDescriptor = new PropertyDescriptor(userName,UserInfo.class);
Method methodGetUserName=proDescriptor.getReadMethod();
Object objUserName=methodGetUserName.invoke(userInfo);
System.out.println("get userName:"+objUserName.toString());
}
(2)通过Introspector,BeanInfo来获取或修改属性
根据Introspector的静态方法getBeanInfo,传入JavaBean的class对象,
得到BeanInfo对象,再根据BeanInfo的getPropertyDescriptors方法得到PropertyDescriptor数组,
遍历该数组,根据PropertyDescriptor的getName()方法得到的属性与要访问的属性进行匹配,
如果匹配上,调用PropertyDescriptor的getWriteMethod(),getReadMethod()
方法或者Method反射对象,调用其invoke方法修改或者获取对象的属性值
(3)导入第三方jar包,使用BeanUtils,PropertyUtils来访问或修改属性
BeanUtils工具包:下载:http://commons.apache.org/beanutils/
注意:应用的时候还需要一个logging包http://commons.apache.org/logging/
BeanUtils.setProperty()
BeanUtils.getProperty()
PropertyUtils.setProperty()
PropertyUtils.getProperty()
这两个工具设置属性的时候一个主要区别是:
PropertyUtils.getPropety方法获得的属性值的类型为 该属性本来的类型,
而BeanUtils.getProperty则是将该属性的值转换成字符串后才返回。