JAVA 内省(introSpector)

用于对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...)自动生成setPropertygetProperty方法。将其封装进去。

把一个类看成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");
相关文章
相关标签/搜索