您的位置:首页 > 编程语言 > Java开发

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都是使用的属性的实际类型,而没有转换为字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: