JavaBean

JavaBean 既不是 Applet,也不是 Application,从本质上来说,JavaBean 就是一组用于构建可重用组件的 Java 类库。与其他任何 Java 类一样,JavaBean 也是由属性和方法组成的。

JavaBean 的属性都具有 private 特性,方法具有 public 特性,方法是 JavaBean 的对外接口。

规范:

  1. 必须有domain包,编程规范/良好的编程习惯。

  2. 必须是具体的和公共的,访问权限最大化,非抽象的

  3. 必须有公有无参构造,方便框架或底层通过反射创建对象。

  4. 必须有相应公有的setter、getter方法,方便设置和获取属性/el表达式。

  5. 建议对象属性私有化,控制直接操作对象属性。

  6. 建议对象属性使用包装类,控制直接操作对象属性。

一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的 getter/setter 方法是 getUserName/setUserName

但是,还有一些特殊情况

  1. 如果属性名的第二个字母大写,那么该属性名直接用作 getter/setter 方法中 get/set 的后部分,就是说大小写不变。例如属性名为uName,方法是 getuName/setuName

  2. 如果前两个字母是大写(一般的专有名词和缩略词都会大写),也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为URL,方法是 getURL/setURL

  3. 如果首字母大写,也是属性名直接用作 getter/setter 方法中 get/set 的后部分。例如属性名为Name,方法是getName/setName,这种是最糟糕的情况,会找不到属性出错,因为默认的属性名是name

属性名/类型 getter 方法 setter 方法
xcoordinate/Double public Double getXcoordinate() public void setXcoordinate(Double newValue)
xCoordinate/Double public Double getxCoordinate() public void setxCoordinate(Double newValue)
XCoordinate/Double public Double getXCoordinate() public void setXCoordinate(Double newValue)
Xcoordinate/Double 不允许 不允许

:类中的属性为对象属性(字段),gettersetter⽅法上的属性为Bean属性(JavaBean属性),其中getter⽅法上的属性称之为可读属性,setter⽅法上⾯的属性称之为可写属性。

调用逻辑:

获得Bean属性时,会根据需要找的Bean属性名寻找对应类中是否有Getter/Setter方法,如果有,则通过Getter/Setter方法读/写值。至于读写的值是否是对象属性,取决于Getter/Setter方法是怎么写的。

BeanUtils

需要的jar包:

commons-beanutils-1.9.2.jar

commons-logging-1.2.jar

commons-collections-3.1.jar

常用方法

  • copyProperties(Object dest, Object orig)

    用法一:同⼀个类之间的属性拷⻉

    Student stu1 = new Student();
    Student stu2 = new Student();
    // 将stu1的Bean属性复制给stu2
    BeanUtils.copyProperties(stu2, stu1);
    

    用法二:不同类之间属性拷⻉

    Student stu = new Student();
    Teacher tea = new Teacher();
    // 将tea与stu相同的Bean属性复制给stu
    BeanUtils.copyProperties(stu, tea);
    

    用法三:把Map⾥⾯的元素拷⻉到对象中去(但是不能把对象的元素拷⻉到

    map)

    Student stu = new Student();
    Map m = new HashMap();
    m.put("name","Alex");
    m.put("age","30");
    // 将map
    BeanUtils.copyProperties(stu, m);