主要使用到了java.beans包下的類,利用底層反射來獲取對象對應(yīng)的屬性和方法;
** BeanInfo **:提供有關(guān)Bean的顯式信息的接口碴里,其中包含類的屬性,方法上真、事件等顯式信息咬腋,可以通過Introspector底層反射機(jī)制獲取
** Introspector **:用于構(gòu)建一個(gè)一個(gè)全面描述目標(biāo)bean的BeanInfo對象,使用低層次的反射來研究類的方法睡互,并應(yīng)用標(biāo)準(zhǔn)設(shè)計(jì)模式來標(biāo)識屬性存儲器根竿、事件源或公共方法。然后深入分析類的超類就珠,并從它那里添加信息
** PropertyDescriptor ** :描述 Java Bean 通過一對存儲器方法導(dǎo)出的一個(gè)屬性以及該屬性的getter和setter方法
相關(guān)實(shí)現(xiàn)代碼:
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());
//調(diào)用該屬性名稱對應(yīng)的getter方法
//throws IntrospectionException,InvocationTargetException,IllegalAccessException
Object obj = new PropertyDescriptor(p.getName(), Project.class).getReadMethod().invoke(project);
//調(diào)用該屬性名稱對應(yīng)的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){
}