国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

由內(nèi)省引出JavaBean的講解

2019-11-14 22:45:04
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
由內(nèi)省引出javaBean的講解

IntroSpector--內(nèi)部檢查,了解更多細(xì)節(jié)--內(nèi)省---JavaBean

一、JavaBean
  • JavaBean是一種特殊的Java類(lèi),主要用于傳遞數(shù)據(jù)信息,這種java類(lèi)中的方法主要用戶(hù)訪問(wèn)私有的字段,且方法名符合某種命名規(guī)則。
  • 如果要在兩個(gè)模塊之間傳遞多個(gè)信息,可以將這些信息封裝到一個(gè)JavaBean中,這種JavaBean的實(shí)例對(duì)象通常稱(chēng)之為值對(duì)象(Value Object ,簡(jiǎn)稱(chēng)VO)。

這些信息學(xué)在類(lèi)中用私有字段來(lái)存儲(chǔ),如果讀取或者設(shè)置這些字段的值,這需要通過(guò)一些相應(yīng)的方法來(lái)訪問(wèn),大家覺(jué)得這些方法的名字叫什么好呢?

JavaBean的屬性石根據(jù)其中的setter和getter方法來(lái)確定的,而不是根據(jù)其中的成員變量。如果方法名為setId,中文意思即為設(shè)置id,值域你把它存在哪個(gè)

變量上,用管嗎?如果方法名為getId,中文意思即為獲取id,至于你從哪個(gè)變量上取,用管嗎?去掉set前綴,剩余部分就是屬性名,如果剩余部分的第二個(gè)

字母是小寫(xiě)的,則把剩余部分的首字母改成小的。

    • setId()的屬性名—>id
    • isLast()的屬性名—>last
    • setCPU()的屬性名—>CPU
    • getUPS()的屬性名—>UPS

總之,一個(gè)類(lèi)被當(dāng)做JavaBean使用時(shí),JavaBean的屬性是根據(jù)方法名推斷出來(lái)的,它根本看不到j(luò)ava類(lèi)內(nèi)部的成員變量。

  • 一個(gè)符合JavaBean特點(diǎn)的類(lèi)可以當(dāng)做一個(gè)普通類(lèi)一樣進(jìn)行使用,但把它當(dāng)JavaBean用肯定需要帶來(lái)一些額外的好處,我們才會(huì)去了解和應(yīng)用JavaBean!

好處如下:

    • 在Java EE開(kāi)發(fā)中,經(jīng)常要使用到JavaBean。很多環(huán)境就要求按JavaBean方式進(jìn)行操作,別人都這么用和要求這么做,哪里就沒(méi)有挑選的余地!
    • JDK中提供了對(duì)JavaBean進(jìn)行操作的一些API,這套API就成為內(nèi)省。得到如果要你自己去通過(guò)getX方法來(lái)訪問(wèn)私有的x,怎么做,有一定難度吧?

用內(nèi)省這套api操作JavaBean比用普通類(lèi)的方式更方便。

 

 

二、內(nèi)省綜合案例
  • 演示用eclipse自動(dòng)生成ReflectPoint的setter和getter方法。
  • 直接new一個(gè)PRopertyDescriptor對(duì)象的方式來(lái)讓大家了解JavaBean API的價(jià)值,先用一段代碼讀取JavaBean的屬性,然后在用一段代碼設(shè)置JavaBean的屬性。
package com.itcast.day2;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import com.itcast.day1.ReflectPoint;public class IntroSpectorTest {    public static void main(String[] args) throws Exception{                ReflectPoint rf1=new ReflectPoint(3,4);                String propertyName="x";                //如果不使用JavaBean API,則需要通過(guò)反射手動(dòng)一步一步做,步驟為:  01."x"-->02."X"-->03."getX"-->04.MethodGetX-->                //讀        PropertyDescriptor pd=new PropertyDescriptor(propertyName, rf1.getClass());        Method methodGetX=pd.getReadMethod();//使用JavaBean API 至此,已經(jīng)完成了 01、02、03、04,顯然方便很多        Object retVal=methodGetX.invoke(rf1);        System.out.println(retVal);                                //寫(xiě)        Object value=6;        PropertyDescriptor pd2=new PropertyDescriptor(propertyName, rf1.getClass());        Method methodSetX=pd.getWriteMethod();//使用JavaBean API 至此,已經(jīng)完成了 01、02、03、04,顯然方便很多        methodSetX.invoke(rf1,value);        System.out.println(rf1.getX());    }}
  • 演示用eclipse將讀取屬性和設(shè)置屬性的流水賬代碼分別抽取成方法:
    • 只要調(diào)用這個(gè)方法,并給這個(gè)方法傳遞一個(gè)對(duì)象、屬性名和設(shè)置值,它就能完成屬性修改的功能。
    • 得到BeanInfo最好采用”obj.getClass()”方式,而不要采用”類(lèi)名.class”方式,這樣程序更通用。

  • 采用遍歷BeanInfo的所有屬性方式來(lái)查找和設(shè)置某個(gè)ReflectPoint對(duì)象的x屬性。在程序中把一個(gè)類(lèi)當(dāng)作JavaBean來(lái)看,就是調(diào)用IntroSpector.getBeanInfo方法,得到的BeanInfo對(duì)象封裝了把這個(gè)類(lèi)當(dāng)作JavaBean看的結(jié)果信息
//獲得屬性值得兩種方式
public static Object getProperty(Object rf1,            String propertyName) throws IntrospectionException,            IllegalaccessException, InvocationTargetException {                //①現(xiàn)在的方式--簡(jiǎn)捷,好!O(∩_∩)O~~        /*PropertyDescriptor pd=new PropertyDescriptor(propertyName, rf1.getClass());        Method methodGetX=pd.getReadMethod();        Object retVal=methodGetX.invoke(rf1);*/                //②最早的方式--遍歷查找,較麻煩 ̄へ ̄        Object retVal=null;        BeanInfo beanInfo=Introspector.getBeanInfo(rf1.getClass());        PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();        for(PropertyDescriptor pd:pds){            if(pd.getName().equals(propertyName)){                Method methodGetX=pd.getReadMethod();                retVal=methodGetX.invoke(rf1);                break;            }        }        return retVal;    }

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁河县| 沐川县| 永清县| 南开区| 耒阳市| 华阴市| 麻城市| 龙井市| 河西区| 新建县| 慈利县| 锦屏县| 贵定县| 南康市| 嘉定区| 武宁县| 阿拉善右旗| 莱阳市| 岱山县| 阿巴嘎旗| 五台县| 新巴尔虎右旗| 呈贡县| 景泰县| 裕民县| 平远县| 孟州市| 成安县| 康保县| 江门市| 桓台县| 金沙县| 长治市| 巴南区| 化隆| 清流县| 南丹县| 五大连池市| 靖远县| 信阳市| 洛阳市|