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

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

JAVA培訓(xùn)之Java內(nèi)省機(jī)制

更新時間:2016年09月23日11時21分 來源:傳智播客JAVA培訓(xùn)學(xué)院 瀏覽次數(shù):

1.什么是內(nèi)省

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

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

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

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

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

圖1-5 內(nèi)省圖
當(dāng)獲得屬性的讀寫方法對應(yīng)的Method對象后,就可以利用反射實現(xiàn)對屬性的操作。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://www.xamj520.com/javaee
0 分享到:
和我們在線交談!