---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!----------------------
一、内省操作javabean的属性
一个字段只有向外提供了相对应的get或set方法,才是属性。属性不是由privateString name决定,而是由个体或set方法决定的。
每一个类中都是继承Object类的,所以都有一个getClass方法,所以都有class属性。像下面这个类,就总共有5个属性:
}
内省,到底省哪个Bean,可以调用它的getBeanInfo(ClassbeanClass)传入参数指定,省完存入一个BeanInfo对象中。然后可以调用getPropertyDescriptors()方法获取到bean的所有属性的属性描述器PropertyDescriptor。进而可以调用这个属性描述器的getWriteMethod()和getReadMethod()方法来获取该Bean的写入属性值的方法(setXXX)和读取属性值的方法(getXXX)。具体代码如下(可以得到bean所有属性):
打印出来的结果为ab age class name
如果只想获取Person类自己定义的属性,不想获取从父类Object类继承而来的属性,可以调用Introspector.getBeanInfo(Person.class,Object.class)获取,在原来的基础上传入多一个Object.class。
如果只想操纵bean的指定属性,不想操纵所有属性的话,可以使用PropertyDescriptor类的另外的构造函数来指定获取的是具体哪一个属性。
如果不知道当前操作的属性是什么类型,可以用以下方法:
二、beanUtils操纵javabean
beanUtils不属于sun公司开发的类,是由第三方提供的用于处理javabean的API。使用beanUtils操纵javabean可以有很多方便的地方。例如:
1、可以直接调用setProperty方法设置Person类中某个属性的值;
Person p=newPerson();
BeanUtils.setProperty(p,"age", 456);
2、beanUtils支持8种基本类型自动转换;
Stringpassword="pw";
Person p=newPerson();
//可以自动将String类型转换为int类型
BeanUtils.setProperty(p,"password", password);
System.out.println(p.getPassword());//pw
3、对于不属于8种数据类型的转换,beanUtils提供了转换工具类CovertUtils,它有注册转换器的register方法。示例代码如下:
Stringbirthday="1983-12-1";
//为了让日期赋值到bean的birthday属性上,给beanUtils注册一个日期转换器
ConvertUtils.register(newConverter(){
其实,beanUntils中已经提供了很多接口Converter的实现类,其中就有用于日期转换器。比如DateLocaleConverter本地日期转换器。所以上面的代码可以直接写成ConvertUtils.register(newDateLocaleConverter (),Date.class)。
4、有时候数据是以键值对的map集合形式存在的,这种情况做法应该如下:
Map map=newHashMap();
map.put("name","aaa");
map.put("password","123");
map.put("brithday","1980-09-09");
ConvertUtils.register(newDateLocaleConverter(), Date.class);
Person p=newPerson();
//使用populate方法,用map集合填充bean属性
//这个时候要注意map关键字和bean属性一定要一致
BeanUtils.populate(p,map);
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!----------------------