一般的做法是通過類 Introspector 來獲取某個對象的 BeanInfo 信息,然後通過 BeanInfo 來獲取屬性的描述器( PropertyDescriptor ),通過這個屬性描述器就可以獲取某個屬性對應的 getter/setter 方法,然後我們就可以通過反射機制來調用這些方法。下面介紹一個簡單的例子:
BeanInfo beanInfo=Introspector.getBeanInfo(clazz.getClass());
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd:pds){
if(propertyName.equals(pd.getName())){
Method methodSet=pd.getWriteMethod();//set方法
methodSet.invoke(clazz, value);
Method methodGet=pd.getReadMethod();
//get方法 retVal=methodGet.invoke(clazz);
}
}
內省的本質是:獲取bean類的get/set方法,獲取或者賦值屬性。核心是使用java反射。