用于对JavaBean(特殊的Java类:符合一些特殊的规则get/set方法)操做。 java
当一个普通的类中有getXxx , setXxx方法时,就能够当作一个JavaBean来操做。在JavaBean中并不知道这个类中的成员名称,因此就把去除get , set后的名称当作成员名称: 工具
若是去除get , set后的名称的第二个字母是小写,则把第一个字母变成小写。如: spa
gettime --> time getTime--> time getCPU -->CPU code
JDK中提供了JavaBean进行操做的API,这API就称为内省。 对象
若是要在两个模块之间传递多个信息,能够将这些信息封装到一个JavaBean中,这种JavaBean的实例对象一般称之为值对象(Value Object ,简称VO) 。 ip
内省的JavaBean应用 字符串
PropertyDescriptor pd = new PropertyDescriptor( 属性名 , 类名 ); get
pd.getReadMethod(); it
pd.getWriterMethod(); for循环
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属性时能够接受任意类型的对象,一般使用字符串。 [java] view plaincopy BeanUtils.setProperty(bud,"y", "19"); System.out.println(BeanUtils.getProperty(bud,"y")); get或者set属性链的值: [java] view plaincopy 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; [java] view plaincopy Mapmap = BeanUtils.describe(bud); BeanUtils.setProperty(map,"y", 22); System.out.println(map); PropertyUtils:get和set都是属性原本的类型 [java] view plaincopy PropertyUtils.setProperty(bud,"x", 13); PropertyUtils.getProperty(bud,"x");