内省(introSpector)

用于对JavaBean(特殊的Java类:符合一些特殊的规则get/set方法)操作。

当一个普通的类中有getXxx , setXxx方法时,就可以当做一个JavaBean来操作。在JavaBean中并不知道这个类中的成员名称,所以就把去除get , set后的名称当做成员名称:

       如果去除get , set后的名称的第二个字母是小写,则把第一个字母变成小写。如:

       gettime -->  time getTime--> time   getCPU -->CPU

 JDK中提供了JavaBean进行操作的API,这API就称为内省。

       如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object  ,简称VO) 。

内省的JavaBean应用

       PropertyDescriptor  pd = new PropertyDescriptor( 属性名 , 类名 );

       pd.getReadMethod();

       pd.getWriterMethod();

 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属性时可以接受任意类型的对象,通常使用字符串。

       BeanUtils.setProperty(bud,"y", "19");

       System.out.println(BeanUtils.getProperty(bud,"y"));

get或者set属性链的值:

       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;

       Mapmap = BeanUtils.describe(bud);

       BeanUtils.setProperty(map,"y", 22);

       System.out.println(map);
PropertyUtils:getset都是属性本来的类型
       PropertyUtils.setProperty(bud,"x", 13);

       PropertyUtils.getProperty(bud,"x");










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值