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

全國(guó)咨詢/投訴熱線:400-618-4000

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

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

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

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

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

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

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

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

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