最近在研究beantutils包,其中的bean拷贝功能固然很好用,但是我不明白在什么情况下,对bean属性单个值的访问及修改,一定得使用beanutils包中的PropertyUtils.getxxxProperty(bean name,String propertyname),而不是使用getxxx()方法。因为后者不需要经过反射,效率更高些。一直没想到必须使用前者是什么情况。

解决方案 »

  1.   

    等等,还有,Property.copyBean()方法和Property.cloneBean()方法,一个拷贝,一个克隆,我试了结果都差不多,不知道本质差别在哪里?
      

  2.   

    最近在研究beantutils包,其中的bean拷贝功能固然很好用,但是我不明白在什么情况下,对bean属性单个值的访问及修改,一定得使用beanutils包中的PropertyUtils.getxxxProperty(bean name,String propertyname),而不是使用getxxx()方法:
    避免get或者set方法的名字命名不正确而引起的错误,此方法更加通用。Property.copyBean()方法和Property.cloneBean()方法,一个拷贝,一个克隆,我试了结果都差不多,不知道本质差别在哪里?copy是深clone,clonebean是浅clone。
      

  3.   

    深拷贝是重新new一块空间,重新拥有一份资源,浅拷贝只是将引用指向那块资源。可是,我的demo显示,两个都是深拷贝,如下:
    copyProperties()方法:
    Employee srcEmp = new Employee();
    srcEmp.setName("name1");
    Employee destEmp = new Employee();
    PropertyUtils.copyProperties(destEmp, srcEmp);
    // 测试是深拷贝还是浅拷贝
    srcEmp.setName("name2");
    System.out.println("访问拷贝Bean普通类型属性:");
    System.out.println(destEmp.getName());
    System.out.println("访问拷贝Bean自定义类型属性:");
    System.out.println(destEmp.getAddress());                  结果为:
                      访问拷贝Bean普通类型属性:
                      name1cloneProperties()方法:
    Employee emp1 = new Employee();
    emp1.setName("name1");
    Employee emp2 = (Employee) BeanUtils.cloneBean(emp1);
    // 测试是深拷贝还是浅拷贝
    emp1.setName("name2");
    System.out.println("访问克隆Bean普通类型属性:");
    System.out.println(emp2.getName());
                      结果为:
                      访问克隆Bean普通类型属性:
                      name1到底区别在哪里???