用于对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);
把一个类当作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”);
BeanUtils.setProperty(bud,"y", "19"); System.out.println(BeanUtils.getProperty(bud,"y"));
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:get和set都是属性本来的类型
PropertyUtils.setProperty(bud,"x", 13); PropertyUtils.getProperty(bud,"x");