java中info_JAVA中BeanInfo的用法

BeanUtils.copyProperties(dest,orgi);实际上是调用的 PropertyUtils.copyProterties(dest,orgi)这个方法来实现的;这个方法的效率是非常低的。通过查看原代码:发现属性之间的COPY。主要用到了。java.beans包里面的相关类和方法。对于原对象(orgi).首先获得BeanInfo类型的对象。如Introspector.getBeanInfo(a.class)。 这个BeanInfo类型的实例。包含了所有的Class类对象的信息。如果有父类。将首先加载获得父类的信息。通过BeanInfo对象。可以获得PropertyDescriptor[] 的数组。通过这个数组。可以获得原对象(orgi)的所有属性以及属性的值。

在BeanUtils.copyProperties();方法中。首先循环获得原对象的一个属性。和属性对应的值。然后根据这个属性。循环目的对象(dest)的属性。找出两个属性一致的那个属性。然后通过,PropertyDescriptor对象中,获得WriteMethod的一个Method 类型对象。最好通过反射。写入属性的值到目标对象对应的属性。假如:原来对象有10个属性。目标对象有10个属性。则在整个copy方法中。需要执行至少10×10比较。少于10×10次的赋值。效率将非常低下。

2.补充。关于BeanInfo类型对象。

BeanInfo对象。有较多的方法。主要的有两个。getPropertyDescriptor().返回一个PropertyDescriptor类型的数组。该类型对象包括父类Object.对象的class属性。

另外一个是。getMethodDescriptor().返回的是一个MethodDescriptor类型的数组。这个数组中,包括对应Bean中的所有方法的属性。甚至是Object。类型定义的。wait().notify()等方法。 关于BeanInfo用法的简单测试:

BeanInfo bif = Introspector.getBeanInfo(TFeeItemR.class);

PropertyDescriptor[] pd=bif.getPropertyDescriptors();

for(int i=0;i

System.out.println("name:"+pd[i].getName());

System.out.println("read method name:"+pd[i].

getReadMethod ().getName());

System.out.println("displayname:"+pd[i].getDisplayName());

}

MethodDescriptor[] md=bif.getMethodDescriptors();for(int m=0;m

System.out.println("name:"+md[m].getName());

System.out.println("method name:"+md[m].getMethod().getName());

System.out.println("displayname:"+md[m].getDisplayName());

}BeanDescriptor bd=bif.getBeanDescriptor();

System.out.println("display name:" +bd.getDisplayName());

System.out.println("name:" +bd.getName());

EventSetDescriptor[] esd =bif.getEventSetDescriptors();for(int m=0;m

System.out.println("name:"+esd[m].getName());

System.out.println("method name:"+esd[m].getGetListenerMethod().getName());

System.out.println("method name:"+esd[m].getRemoveListenerMethod().getName());

System.out.println("method name:"+esd[m].getAddListenerMethod().getName());

System.out.println("displayname:"+esd[m].getDisplayName());

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值