用於對JavaBean(特殊的Java類:符合一些特殊的規則get/set方法)操做。 java
當一個普通的類中有getXxx , setXxx方法時,就能夠當作一個JavaBean來操做。在JavaBean中並不知道這個類中的成員名稱,因此就把去除get , set後的名稱當作成員名稱: 工具
若是去除get , set後的名稱的第二個字母是小寫,則把第一個字母變成小寫。如: spa
gettime --> time getTime--> time getCPU -->CPU code
JDK中提供了JavaBean進行操做的API,這API就稱爲內省。 對象
若是要在兩個模塊之間傳遞多個信息,能夠將這些信息封裝到一個JavaBean中,這種JavaBean的實例對象一般稱之爲值對象(Value Object ,簡稱VO) 。 ip
內省的JavaBean應用 字符串
PropertyDescriptor pd = new PropertyDescriptor( 屬性名 , 類名 ); get
pd.getReadMethod(); it
pd.getWriterMethod(); for循環
JavaBean規則
1. 類訪問權限爲公有
2. 全部屬性爲私有
3. 每一個字段對外提供setter方法和getter方法
4. 具有一個無參的構造方法
PropertyDescriptor pd = new PropertyDescriptor(propertyName,isd.getClass());//參數1:屬性名,參數2:bean類 MethodmethodSetX = pd.getWriteMethod(); methodSetX.invoke(isd,obj); MethodmethodGetX = pd.getReadMethod(); ObjectretVal = methodGetX.invoke(isd);
能夠用Eclipse的方法抽取(Refactor/Extract Method...)自動生成setProperty和getProperty方法。將其封裝進去。
把一個類看成JAVABEAN:
BeanInfo beanInfo = IntorSpector.getBeanInfo( 對象.getClass() ); PropertyDesriptors[] pds= beanInfo.getPropertyDescriptors();//可獲取類中全部的屬性方法。 再用for循環歷遍查找須要的方法。 BeanInfo beanInfo = Introspector.getBeanInfo(isd.getClass()); PropertyDescriptor[] pds= beanInfo.getPropertyDescriptors(); ObjectretVal = null; for(PropertyDescriptor pd : pds){ if(pd.getName().equals(propertyName)){ MethodmethodGetX = pd.getReadMethod(); retVal= methodGetX.invoke(isd); break; } } return retVal;
BeanUtils工具包
Java7的新特性:
Map map = (name : 「zxx」,age : 18); BeanUtils.setProperty(map,「name」,」lhm」);
get屬性時返回的結果爲字符串,set屬性時能夠接受任意類型的對象,一般使用字符串。 [java] view plaincopy BeanUtils.setProperty(bud,"y", "19"); System.out.println(BeanUtils.getProperty(bud,"y")); get或者set屬性鏈的值: [java] view plaincopy BeanUtils.setProperty(bud,"birthDay.time", "111"); System.out.println(BeanUtils.getProperty(bud,"birthDay.time")); copyProperty(Object best,Object orig):copy源屬性的值至目標屬性。 describe(Object dean): 將一個bean轉換成map; [java] view plaincopy Mapmap = BeanUtils.describe(bud); BeanUtils.setProperty(map,"y", 22); System.out.println(map); PropertyUtils:get和set都是屬性原本的類型 [java] view plaincopy PropertyUtils.setProperty(bud,"x", 13); PropertyUtils.getProperty(bud,"x");