JavaBean
2015-08-03 16:42
381 查看
JavaBean
标签(空格分隔): Java什么是JavaBean
JavaBean是一种特殊的Java类,它主要用于传递数据信息,此类中的方法按照某种规则命名。这种用于传递信息的对象通常被称为值对象(Value Object, VO),这些信息在类中用私有字段来存储,并通过set和get方法来进行访问。private int x; int getAge(){...} void setAge(int age){...}
把Person作为一个JavaBean开看,可以视其为其拥有一个age属性,而具体这个属性是如何存储或得来的,我们并不知道,也不需要去关注。即对于JavaBean,外部组件通过其get/set方法来推断其所拥有的属性,即截取getXxx和setXxx中Xxx部分并把第一个字母改为小写,来作为其属性名(如果第二个字母为小写,则把最后一个字母变为小写)。因此对于JavaBean来说,其get和set方法后的名称应该尽量与其属性名完全一致。例如:
getAge –> age
getCPU —> CPU
getname –> name
Person类:
class Person{ private int x; public int getAge(){ return x; } public void setAge(int age){ this.x = age; } }
使用内省操作JavaBean
一个符合JavaBean特点的类依然可以当做普通类一样进行使用,但把其当做JavaBean来处理可以获得一些额外的便利:Java EE开发中,经常要用到JavaBean,很多环境下都要求按照JavaBean来操作。
JDK中提供了对JavaBean进行操作的一些API,这套API称之为内省。使用内省可以使得对JavaBean的操作更加便利。
使用内省方法获得JavaBean对象属性值
使用内省,需要使用到java.beans软件包。其中的PropertyDescriptor类提供了根据get/set方法操作属性的功能,即getReadMethod() / getWriteMethod(),他们返回get/set方法的Method对象,使用getName()方法可以获取对应的属性名。Person person = new Person(18); //PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。 PropertyDescriptor pd = newPropertyDescriptor("age", person.getClass()); Method methodGetAge = pd.getReadMethod(); Object retVal = methodGetAge.invoke(person); System.out.println(retVal); Method methodSetAge = pd.getWriteMethod(); methodSetAge.invoke(person, 28); // 28 Auto-Boxing System.out.println(person.getX());
使用内省的另一种方法
使用java.beans.Introspector类,这是一个工具类,里面包含的都是static方法,没有构造器。其中的
getBeanInfo(person.getClass())方法可以获得一个对此JavaBean进行描述的BeanInfo类。 BeanInfo对象的
getPropertyDescriptors()方法可以返回此JavaBean的所有属性的PropertyDescriptor对象。这种方式相比第一种复杂一些,但是第一种只适用于已知此javabean中具有的属性并希望对其操作的情况,而这种复杂的方法可以在未知JavaBean信息的情况下,动态获得其所有的信息,并对其进行操作。
//使用Introspector工具类来获取BeanInfo对象,然后获取所有的属性和方法描述。 BeanInfo info = Introspector.getBeanInfo(person.getClass()); PropertyDescriptor[] pds = info.getPropertyDescriptors(); for(PropertyDescriptor pd : pds){ if(pd.getName().equals(“age”)){ sop(pd.getReadMethod().invoke(person)); break; } }
使用Beanutils操作JavaBean
Beanutils是apache开发的一套开源工具包,用于进一步简化对JavaBean的操作。通过使用beanutils这个工具包,我们可以象访问Map一样来访问javabean。所以,beanutils工具包是javabean与map之间的一座桥。这个工具包就是为了struts而生而存在的。要使用beanutils工具包,需要去网上下载对应的工具包commons-beanutils-current,解压后里面包含一些用户文档,还有三个版本的jar包,一个完全的,一个部分的,一个精巧的。需要把需要的jar包添加进eclipse工程下。
注意:要使用beanutils包,还需要再添加一个apache公司的另一个日志工具包,commons-logging。
使用BeanUils工具类就可以完成对属性的get/set操作。
BeanUtils.getProperty(person, "age"); BeanUtils.setProperty(person, "age","38");
注意:set和get的值都是字符串。这是为了方便实际Web应用。
级联set/get
BeanUtils.setProperty(javaBean, "属性名.属性名","value");
即设置属性的属性。属性名要赋初值,不然会报无效的属性异常。
在Person中定义private Date birthday;
BeanUtils.setProperty(person,"birthday.time","111"); BeanUtils.getProperty(person,"birhday.time");
其他方法
使用copyProperties(目标对象,源对象)来将后一个对象的属性拷贝到前一个对象中。使用describe(目标对象)可以将一个javabean转换为一个map。
使用populate(javaBean,Map)将一个map的值填充到javabean中。
可以直接使用BeanUtils的方法操作map:
Map map = {name : "zxx", age :18}; //java 7 新特性 BeanUtils.setProperty(map,"name", "lhm");
PropertyUtils.setProperty(javaBean, "属性名", value); valueType value =PropertyUtils.getProperty(javaBean, "属性");
注意PropertyUtils类操作属性时,set和get都是使用的属性的实际类型,而没有转换为字符串
相关文章推荐
- java ee 网页中图表的显示
- Java多线程
- maven入门笔记
- java容器练习题集合
- java工程如何导入文件和包
- JavaSrcipt快速入门(二)(2015.8.3)
- java 多线程------条件变量
- Math.Round
- java反射机制
- java小结
- java多线程同步
- Leetcode-8(Java) String to Integer (atoi)
- java多线程--障碍器
- springMail发送Text简单邮件的方法
- Java byte数组 转short int
- java可变参数
- C # 和 Java的不同之处
- spring 自动检测bean
- java容器上
- Spring总结