Java面向对象-JavaBean内省_第1页
Java面向对象-JavaBean内省_第2页
Java面向对象-JavaBean内省_第3页
Java面向对象-JavaBean内省_第4页
Java面向对象-JavaBean内省_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象初识JavaBean与内省JavaBean是一种特殊的Java类,主要用于传递数据信息,这种Java类中的方法主要用于访问私有的字段,且方法名符合某种命名规那么。JavaBean的应用情景如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象〔ValueObject,简称VO〕。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,那么需要通过一些相应的方法来访问。JavaBean的规那么JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setld,中文意思即为设置id,至于你把它存到哪个变量上,那么不用管。如果方法名为getld,中文意思即为获取id,至于你从哪个变量上取,也不用管。去掉set前缀,剩余局部就是属性名,如果剩余局部的第二个字母是小写的,那么把剩余局部的首字母改成小的。例如:setId()的属性名:idisEmpty()的属性名:emptysetCPU的属性名:CPUgettime的属性名:time总之,一个类被当作JavaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到Java类内部的成员变量。一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!JavaBean的好处好处如下:1、 在JavaEE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选的余地!2、 JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套API操作JavaBean比用普通类的方式更方便。对JavaBean的简单内省操作通过内省的方式对Person对象中的成员变量进行读写操作。并对生成的代码进行重构。通过反射对某个属性进行读写操作的代码可以抽取为通用方法,通过MyEclipse可以非常轻松实现这个功能。步骤如下:选中需要重构的代码,右击一>Refactor—>ExtractMethod...。给抽取后的方法取一个名字,然后点击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);}}注意:抽取方法之后,为了使抽取后的方法具备通用性,一定要把方法中某些参数设置为Object类型。对JavaBean的复杂内省操作采用遍历BeanInf。的所有属性方式来查找和设置某个对象的属性。在程序中把一个类当作JavaBean来看,就是调用IntroSpector.getBeanInfo方法,得到的BeanInfo对象封装了把这个类当作JavaBean看的结果信息。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工具包首先要导入jar包。步骤:1、官网下载工具包1、官网下载工具包2、在工程下创立一个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實璋b& 」;qCTl,-p=x肇▼□實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编写代码,可以发现使用BeanUtils工具包可以很容易实现与上面的代码相同的效果。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工具类在对对象的属性进行操作的时候,会自动进行类型转换。但是设置属性值的时候传入的参数却可以是String类型,这是因为内部发生了自动类型转换。BeanUtils工具类可以对属性进行级联操作,例如Dat〔java.util.Date〕类中有setTime方法,那么也就相当于Date类型对象有一个time属性,BeanUtils就可以对其进行操作。图例:

嘴j嘴j心•占T書戏妇qhoi樹hbeiEiV&ytil/JiwMwndjK”,My£cEpseEmerpAse隔rkbencfi USAHieEdit^uirefte^&rtorhdvigstr口roj^d:MyfdipseMobilrS-iM^chfiunwindowHelpPropertyUtils类也可以操作对象的属性,但是与BeanUtils不同的是它不能进行自动类型转换。例如Person类中的age属性为int类型,但是设置属性值的时候传入的参数就不可以是String类型。HMm-独日此iEXchyOLU&e恥dnsij址占•My£cEpseErta^ri-se敝irkbei■•街日町Edit钮uceR^&rtorWdviqSr口yjKtMytdipsrMcbikS-K*chftunWMwn«4p

如果设置成了String类型,那么将会报错。二,-- 冨園 \雄*0實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補崩2小邮_网丄礼卩国弛旳mwzwC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论