Java面向?qū)ο?JavaBean內(nèi)省_第1頁
Java面向?qū)ο?JavaBean內(nèi)省_第2頁
Java面向?qū)ο?JavaBean內(nèi)省_第3頁
Java面向?qū)ο?JavaBean內(nèi)省_第4頁
Java面向?qū)ο?JavaBean內(nèi)省_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

面向?qū)ο蟪踝RJavaBean與內(nèi)省JavaBean是一種特殊的Java類,主要用于傳遞數(shù)據(jù)信息,這種Java類中的方法主要用于訪問私有的字段,且方法名符合某種命名規(guī)那么。JavaBean的應(yīng)用情景如果要在兩個(gè)模塊之間傳遞多個(gè)信息,可以將這些信息封裝到一個(gè)JavaBean中,這種JavaBean的實(shí)例對象通常稱之為值對象〔ValueObject,簡稱VO〕。這些信息在類中用私有字段來存儲,如果讀取或設(shè)置這些字段的值,那么需要通過一些相應(yīng)的方法來訪問。JavaBean的規(guī)那么JavaBean的屬性是根據(jù)其中的setter和getter方法來確定的,而不是根據(jù)其中的成員變量。如果方法名為setld,中文意思即為設(shè)置id,至于你把它存到哪個(gè)變量上,那么不用管。如果方法名為getld,中文意思即為獲取id,至于你從哪個(gè)變量上取,也不用管。去掉set前綴,剩余局部就是屬性名,如果剩余局部的第二個(gè)字母是小寫的,那么把剩余局部的首字母改成小的。例如:setId()的屬性名:idisEmpty()的屬性名:emptysetCPU的屬性名:CPUgettime的屬性名:time總之,一個(gè)類被當(dāng)作JavaBean使用時(shí),JavaBean的屬性是根據(jù)方法名推斷出來的,它根本看不到Java類內(nèi)部的成員變量。一個(gè)符合JavaBean特點(diǎn)的類可以當(dāng)作普通類一樣進(jìn)行使用,但把它當(dāng)JavaBean用肯定需要帶來一些額外的好處,我們才會去了解和應(yīng)用JavaBean!JavaBean的好處好處如下:1、 在JavaEE開發(fā)中,經(jīng)常要使用到JavaBean。很多環(huán)境就要求按JavaBean方式進(jìn)行操作,別人都這么用和要求這么做,那你就沒什么挑選的余地!2、 JDK中提供了對JavaBean進(jìn)行操作的一些API,這套API就稱為內(nèi)省。如果要你自己去通過getX方法來訪問私有的x,怎么做,有一定難度吧?用內(nèi)省這套API操作JavaBean比用普通類的方式更方便。對JavaBean的簡單內(nèi)省操作通過內(nèi)省的方式對Person對象中的成員變量進(jìn)行讀寫操作。并對生成的代碼進(jìn)行重構(gòu)。通過反射對某個(gè)屬性進(jìn)行讀寫操作的代碼可以抽取為通用方法,通過MyEclipse可以非常輕松實(shí)現(xiàn)這個(gè)功能。步驟如下:選中需要重構(gòu)的代碼,右擊一>Refactor—>ExtractMethod...。給抽取后的方法取一個(gè)名字,然后點(diǎn)擊OK。代碼例如:packagecom.tuozou.day01;publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}packagecom.tuozou.day01;importjava.beans.PropertyDescriptor;importjava.lang.reflect.Method;publicclassIntroSpector{publicstaticvoidmain(String[]args)throwsException{Personp=newPerson();setProperty(p,"age”,21);Objectobj=getProperty(p,"age");System.out.println(obj);}privatestaticObjectgetProperty(Objectobj,StringpropertyName)throwsException{PropertyDescriptorpd=newPropertyDescriptor(propertyName,obj.getClass());MethodmethodGetAge=pd.getReadMethod();ObjectretVal=methodGetAge.invoke(obj);returnretVal;}private staticvoidsetProperty(Objectobj,StringpropertyName,intvalue)throwsException{PropertyDescriptorpd=newPropertyDescriptor(propertyName,obj.getClass());MethodmethodSetAge=pd.getWriteMethod();methodSetAge.invoke(obj,value);}}注意:抽取方法之后,為了使抽取后的方法具備通用性,一定要把方法中某些參數(shù)設(shè)置為Object類型。對JavaBean的復(fù)雜內(nèi)省操作采用遍歷BeanInf。的所有屬性方式來查找和設(shè)置某個(gè)對象的屬性。在程序中把一個(gè)類當(dāng)作JavaBean來看,就是調(diào)用IntroSpector.getBeanInfo方法,得到的BeanInfo對象封裝了把這個(gè)類當(dāng)作JavaBean看的結(jié)果信息。packagecom.tuozou.day01;importjava.beans.BeanInfo;importjava.beans.Introspector;importjava.beans.PropertyDescriptor;importjava.lang.reflect.Method;publicclassJavaBeansOrd{publicstaticvoidmain(String[]args)throwsException{Personp=newPerson。;Objectage=getPropertyTo(p,"age");System.out.println(age);}privatestaticObjectgetPropertyTo(Objectobj,StringpropertyName)throwsException{PropertyDescriptorpd=newPropertyDescriptor(propertyName,obj.getClass());BeanInfobeanInfo=Introspector.getBeanInfo(obj.getClass());PropertyDescriptor[]pds=beanInfo.getPropertyDescriptors();ObjectretVal=null;for(PropertyDescriptorp:pds){if(pd.getName().equals(propertyName)){MethodmethodGetAge=pd.getReadMethod();retVal=methodGetAge.invoke(obj);

break;returnretVal:使用BeanUtils工具包操作JavaBean使用BeanUtils工具包首先要導(dǎo)入jar包。步驟:1、官網(wǎng)下載工具包1、官網(wǎng)下載工具包2、在工程下創(chuàng)立一個(gè)lib文件夾一〉將beanutils的jar包拷貝到其中一〉右擊該jar包一>BuildPath—>AddtoBuildPath。惇惇Pjdciga白駕I¥t■■t/JmTE-tSsrc「卩ucrrulh.iE.".:?JRESyrtamUbfBrr&tan&E"L7]*BkRe^encedIlbrMN■vcarmani-bcanulik-LS.ljisr-rcc<TrTiQni-l&g^n^|-L,L.3jHr-&Ubjg匸十LL.M扣itAtEdit鈕ur?Re^srtorN麻口赤PrajtctMytdips?Mobil?S-(whfiun,1indawHdpri實(shí)璋b& 」;qCTl,-p=x肇▼□實(shí)fit<I III 9hPrcbleiTri婀M■女0: Dedarzban□CfirwolcM誓<I III 9hPrcbleiTri婀M■女0: Dedarzban□CfirwolcM誓iPrajKfMgraWX舉.itt圍爐.1-j?vygin占ted^」占wEexKJ占心ApplicMmG^^LcEpsel!ibinjr^i.conii5un.p¥Ajd(7.¥rtii32ji£lb_6i_LJj0.!j45\ibin^&i^Aiv^->e[2Q1432014 ■QuicfcAec-.b in畫EiQ] Q]JAaflwanGjJbaimportorg.apa€h漫』connom&.beanutils.Beanlltile;publicclassJ^vaBsans(publicstaticvoidmain(String[]argt)threesException(Per&onp=newPersan();BeanUtils,setProperty([pa"ntame'%"Xct-1);Stringname■Beanllti1s-getProperty(pp"name")hgetCl^S5()g€tN5me();Systen.out.printin(n日恥); sname-&eanlltiLs?tProperty(p"name")jSystM,out.printIn(na*);BeanUtilsusetProperty(p."birthday.time"f112014Stringbirthday=BeanUtiIs>c?etProp^rty(p"birthdayntime");System.out.prlntlnfbirthday)j.)H編寫代碼,可以發(fā)現(xiàn)使用BeanUtils工具包可以很容易實(shí)現(xiàn)與上面的代碼相同的效果。packagecom.tuozou.day01;importorg.apachemons.beanutils.BeanUtils;publicclassJavaBeans{publicstaticvoidmain(String[]args)throwsException{Personp=newPerson。;BeanUtils.setProperty(p,"name”,"Xcc"");Stringname=BeanUtils.getProperty(p,"name").getClass().getName();System.out.println(name);name=BeanUtils.getProperty(p,"name");System.out.println(name);BeanUtils.setProperty(p,"birthday.time”,"2014");Stringbirthday=BeanUtils.getProperty(p,"birthday.time");System.out.println(birthday);}}注意:BeanUtils工具類在對對象的屬性進(jìn)行操作的時(shí)候,會自動(dòng)進(jìn)行類型轉(zhuǎn)換。但是設(shè)置屬性值的時(shí)候傳入的參數(shù)卻可以是String類型,這是因?yàn)閮?nèi)部發(fā)生了自動(dòng)類型轉(zhuǎn)換。BeanUtils工具類可以對屬性進(jìn)行級聯(lián)操作,例如Dat〔java.util.Date〕類中有setTime方法,那么也就相當(dāng)于Date類型對象有一個(gè)time屬性,BeanUtils就可以對其進(jìn)行操作。圖例:

嘴j嘴j心?占T書戲婦qhoi樹hbeiEiV&ytil/JiwMwndjK”,My£cEpseEmerpAse隔rkbencfi USAHieEdit^uirefte^&rtorhdvigstr口roj^d:MyfdipseMobilrS-iM^chfiunwindowHelpPropertyUtils類也可以操作對象的屬性,但是與BeanUtils不同的是它不能進(jìn)行自動(dòng)類型轉(zhuǎn)換。例如Person類中的age屬性為int類型,但是設(shè)置屬性值的時(shí)候傳入的參數(shù)就不可以是String類型。HMm-獨(dú)日此iEXchyOLU&e恥dnsij址占?My£cEpseErta^ri-se敝irkbei■?街日町Edit鈕uceR^&rtorWdviqSr口yjKtMytdipsrMcbikS-K*chftunWMwn?4p

如果設(shè)置成了String類型,那么將會報(bào)錯(cuò)。二,-- 冨園 \雄*0實(shí)01,—,含皿帶 >T,T1/QuickAccvaanl?aEJaw&saiLpgX1?Pfirfcn.ja^=□1H口!ackagecom?itfieima.dayOl\importorg-apAch^e,ccmrnonsrbejr>util^BPiropertyUtilsjpubliccl?*$JevaBeans{*publicstaticveidlmain(String[]args)throwsException(Person-p-n*MP&rso^O;PropertyUtils-setPraperty(p^age'^"21")jObject合戲二PropertyUtIls,getPrcperty(p>"age");System“out-printin(age*" '+age. 匸lass()-getNaite())j?l1 }}% *駁jJ占心"最」略站火/tbfiAgsinm:知01/冬村占恥an*。*,MytclpseEiiteftfi-se叫□rkbEtfiAt~dtSquireRe^&rtorN応口z<rPrajwtMyGdipsrMabilrE(whftunWn.tjwHdp匱卩檔su鼻JjL^dix:陸,口WmciMSCcncDtaki^PrcjGaM^Qilun 算黛|h罷[命|舊|u?3■?■TJ*a□■=MeE把d=?JawsSranj〔.3?yEwHm]咽旳Ed*#bf于睥加日兄H補(bǔ)崩2小郵_網(wǎng)丄禮卩國弛旳mwzwC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論