教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JAVA培訓之Java內省機制

更新時間:2016年09月23日11時21分 來源:傳智播客JAVA培訓學院 瀏覽次數:

1.什么是內省

內?。↖ntrospector)是Java語言對 Bean類屬性、事件的一種缺省處理方法。例如類A中有屬性name,那我們可以通過getName(),setName()來得到其值或者設置新的值。通過 getName/setName來訪問name屬性,這就是默認的規(guī)則。Java中提供了一套API用來訪問某個屬性的getter/setter方法, 通過這些API可以使你不需要了解這個規(guī)則,這些API存放于包java.beans中。
一般的做法是通過類Introspector來獲取某個對象的BeanInfo信息,然后通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然后我們就可以通過反射機制來調用這些方法。
其中,BeanInfo類是JavaBean的信息類,而BeanInfo類是通過Introspector類調用相關方法獲得的,下面我們通過幫助文檔來查看Introspector類,如圖1-1所示:

圖1-1 Introspector類
圖1-1中,Introspector類調用靜態(tài)的getBeanInfo(Class<?> clz)方法就可以獲得一個BeanInfo類型的對象,其中該方法的參數是javaBean的Class對象。
現在在該幫助文檔中查看BeanInfo類,如圖1-2所示:

圖1-2 BeanInfo類
圖1-2中,BeanInfo類一共有八個方法,其中有個方法是getIcon(int iconKind ),在學習JavaBean時,我們說過JavaBean分兩種,有一種是有用戶界面的JavaBean,那么這個方法就是獲取界面中JavaBean的圖像對象。而用紅色框標注的兩個方法是我們重點學習的方法,如下:
  • MethodDescriptor[] getMethodDescriptors():
該方法返回的是描述受此JavaBean支持的擴展可見方法的MethodDescriptor數組
  • PropertyDescriptor[] getPropertyDescriptors():
該方法返回的是描述受此JavaBean支持的可編輯屬性的PropertyDescriptor數組。
現在我們再來看看MethodDescriptor和PropertyDescriptor,首先了解MethodDescriptor類有哪些方法,如圖1-3所示:

圖1-3 MethodDescriptor類
圖1-3中,調用getMethod()方法可以獲得指定方法的Method類型對象,然后就可以利用反射執(zhí)行指定的方法。
PropertyDescriptor類的方法如圖1-4所示:

圖1-4 PropertyDescriptor類
圖1-4中,紅色方框標注的兩個方法比較常用,分別用來獲得讀屬性的方法和寫屬性的方法,獲得了讀寫方法的Method類型的對象,就可以利用反射實現操作和讀取屬性值的功能。
通過對以上幾個類的分析,下面通過一張圖來了解實現內省的步驟,如圖1-5所示:

圖1-5 內省圖
當獲得屬性的讀寫方法對應的Method對象后,就可以利用反射實現對屬性的操作。
本文版權歸傳智播客Java培訓學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:傳智播客Java培訓學院
首發(fā):http://fskzgqt.cn/javaee
0 分享到:
和我們在線交談!