内省
JavaBean是一个特殊的java类,jdk提供的对javabean的操作的API就是内省.对javabean的操作无外乎对属性的get和set,而这其实就是调用JavaBean的对应的set和get方法的过程,因此把javaBean当做普通类来处理势必很麻烦,因为我们很难准确的定义各属性所对应的set和get方法名,显然内省提供了解决此问题的方法
PropertyDescriptor描述 Java Bean 通过一对存储器方法导出的一个属性.它的三个构造方法
String
propertyName,
PropertyDescriptor
(
Class
<?> beanClass,
String
writeMethodName)
String
propertyName,
Method
writeMethod)
显然在我们不能很容易的确定一个JavaBean的属性的时候,我们更应该使用第一个构造方法
String
propertyName,
Class
<?> beanClass)
我们只要传递操作的JavaBean类的Class对象和属性的名字这两个变量就可以了,而不必考虑这个属性的get和set方法是什么样的.
当获得PropertyDescriptor的对象的时候我们可以调用对象的getReadMethd和getWriteMethod来获取JavaBean属性的一对存储器方法对象,即get和set方法对象.接着就可以用反射的方法来调用这些方法.
BeanUtils是apache提供的操作JavaBean的工具包,包含了多种对JavaBean操作的方法.如:
BeanUtils.setProperty(Object obj,String PropertyName,String PropertyValue)设置JavaBean的属性值;
BeanUtils.getProperty(Object obj,String PropertyName)获取JavaBean的属性值;
BeanUtils.copyProperties(Object dest,Object orig)拷贝属性
BeanUtils.describe(Object bean)将指定的bean转换为Map类型
BeanUtils.setProperty()与PropertyUtils.setProperty()的区别是,BeanUtils为JavaBean属性的值赋值类型是字符串,而PropertyUtils则是属性的原本类型
BeanUtils还支持属性的延伸,若BeanUtils操作的JavaBean对象bean的一个属性date是一个类的对象,而这个类也可以当做一个JavaBean类看待,并且有属性x,那么我们可以在用BeanUtils操作bean时延伸到date的x属性,如BeanUtils.getProperty(bean,date.x).
BeanUtils是一个功能强大的工具包,可以在以后的使用中查询BeanUtils的api文档来了解各个方法的详细用法.