javabean属性copy(Spring BeanUtils、Cglib BeanCopier、Apache BeanUtils和PropertyUtils)

介绍

在开发中,经常在代码中会创建DO、SDO、DTO、VO等类,这些Bean中的大部分属性都是一样的,经常会将一个bean的属性赋值给另一个bean对象

例子

PersonDO类:

public class PersonDO {
    private String id
    private String name;
    private Integer age;
    //此处省略getter/setter方法
}

PersonDTO类:

public class PersonDTO {
    private String name;
    private String sex;
    private Integer age;
    //此处省略getter/setter方法
}
PersonDO pdo=new Person();
pdo.setId("123");
pdo.setName("lilei");
pdo.setAge(20)

PersonDTO pdto=new PersonDTO();

//如果属性很多,会写很多下面的set、get代码
pdto.setName(pdo.getName());
pdto.setAge(pdo.getAge());

使用工具类

如果两个对象之间属性大致相同,使用属性拷贝工具更简单方便,常用的有:

  1. Spring BeanUtils(推荐)

  2. Cglib BeanCopier

  3. Apache BeanUtils

  4. Apache PropertyUtils

下面是实现例子 和 性能对比

实现例子

Spring BeanUtils

需要 spring-beans.jar

PersonDTO personDTO = new PersonDTO();

org.springframework.beans.BeanUtils.copyProperties(, personDTO);

Cglib BeanCopier

PersonDTO personDTO = new PersonDTO();

BeanCopier copier = BeanCopier.create(PersonDO.class, PersonDTO.class, false);

copier.copy(personDO, personDTO, null);

Apache BeanUtils

PersonDTO personDTO = new PersonDTO();

BeanUtils.copyProperties(personDTO, personDO);

Apache PropertyUtils

PersonDTO personDTO = new PersonDTO();

PropertyUtils.copyProperties(personDTO, personDO);

性能

由上图性能对比可知,apache的2个类库不推荐;web开发中多会用到spring相关框架,所以推荐使用spring BeanUtils


原文出处:/show_1EF606UobV6T.html