JavaBean

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来处理可以获得一些额外的便利:

  1. Java EE开发中,经常要用到JavaBean,很多环境下都要求按照JavaBean来操作。
  2. 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都是使用的属性的实际类型,而没有转换为字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值