javabean的一部分可以看做是對數據的封裝,其向外暴露出數據的getter/setter方法,
用框架開發時,經常需要使用java對象的屬性來封裝程序的數據,每次都使用反射技術完成此類操作過于麻煩,所以sun公司開發了一套API,專門用于操作java對象的屬性。
內省訪問JavaBean屬性的方式:
通過Introspector類獲得Bean對象的 BeanInfo,然后通過 BeanInfo 來獲取屬性的描述器(PropertyDescriptor ),通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法,然后通過反射機制來調用這些方法。如下:
//獲取bean的信息
//BeanInfo beaninfo = Introspector.getBeanInfo(Student.class);
//如果不想從父類中也獲取父類的屬性那么使用如下:
//Introspector.getBeanInfo(beanClass, stopClass)
//stopClass代表不用從父類獲取,object有一個class的屬性
BeanInfo beaninfo = Introspector.getBeanInfo(Student.class,Object.class);
//獲取屬性描述器
PropertyDescriptor[] ?propertys = beaninfo.getPropertyDescriptors();
//獲取屬性描述器有 getWriteMethod();找到setXxx方法 ?getReadMethod();找到getXxx方法
PropertyDescriptor[] propertys? = bininfo.getPropertyDescriptors();
for (PropertyDescriptor pd : propertys) {
System.out.println("屬性名稱" + pd.getName());
System.out.println("屬性DisplayName"+ pd.getDisplayName());
System.out.println("屬性類型" + pd.getPropertyType());
System.out.println("屬性set"+ pd.getWriteMethod().invoke(ps, "yetong"));
System.out.println("屬性get"+ pd.getReadMethod().invoke(ps, null));
System.out.println("**************************************************");
}
然后通過Method類.invok((Object obj, Object... args))操作Bean的屬性