主要使用到了java.beans包下的类,利用底层反射来获取对象对应的属性和方法;
** BeanInfo **:提供有关Bean的显式信息的接口,其中包含类的属性,方法、事件等显式信息,可以通过Introspector底层反射机制获取
** Introspector **:用于构建一个一个全面描述目标bean的BeanInfo对象,使用低层次的反射来研究类的方法,并应用标准设计模式来标识属性存储器、事件源或公共方法。然后深入分析类的超类,并从它那里添加信息
** PropertyDescriptor ** :描述 Java Bean 通过一对存储器方法导出的一个属性以及该属性的getter和setter方法
相关实现代码:
public void test(Project project){
BeanInfo beanInfo;
try{
//throws IntrospectionException
beanInfo=Introspector.getBeanInfo(project.getClass(), Object.class);
if(beanInfo!=null){
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor p:propertyDescriptors){
//获得属性名称
System.err.println(p.getName());
//调用该属性名称对应的getter方法
//throws IntrospectionException,InvocationTargetException,IllegalAccessException
Object obj = new PropertyDescriptor(p.getName(), Project.class).getReadMethod().invoke(project);
//调用该属性名称对应的setter方法
//throws IntrospectionException,InvocationTargetException,IllegalAccessException
new PropertyDescriptor(p.getName(), Project.class).getWriteMethod().invoke(project,new Object[]{"1"});
}
}
}catch (IntrospectionException e){
}catch (InvocationTargetException e1){
}catch (IllegalAccessException e2){
}