Java高級特性 內省

Java內省在計算機編程中定義:通過Java內省可以獲取bean是什麼,能做什麼。我個人理解:java語言對Bean類屬性、事件一種缺省的處理方法;例如類中有屬性 name, 那我們可以通過 getName,setName 來得到其值或者設置新的值。通過 getName/setName 來訪問 name 屬性,這就是默認的規則。 Java 中提供了一套 API 用來訪問某個屬性的 getter/setter 方法,通過這些 API 可以使你不需要了解這個規則(但你最好還是要搞清楚),這些 API 存放於包 java.beans 中。 

一般的做法是通過類 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反射。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章