1:属性类型不一致导致拷贝失败
2:null值覆盖导致数据异常
拷贝数据的null值覆盖拷贝目标数据的字段,导致原有的数据失效。
3:BeanUtils.copyProperties是浅拷贝
拷贝后修改了原始对象的引用类型的数据,就会导致拷贝数据的值发生异常。
4:底层实现为反射拷贝效率低
public class BeanUtilsTest {
public static void main(String[] args) {
long copyStartTime = System.currentTimeMillis();
User sourceUser = new User("sunyangwei");
User targetUser = new User();
for(int i = 0; i < 10000; i++) {
BeanUtils.copyProperties(sourceUser, targetUser);
}
System.out.println("copy方式:"+(System.currentTimeMillis()-copyStartTime));
long setStartTime = System.currentTimeMillis();
for(int i = 0; i < 10000; i++) {
targetUser.setUserName(sourceUser.getUserName());
}
System.out.println("set方式:"+(System.currentTimeMillis()-setStartTime));
}
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class User{
private String userName;
}
建议解决方案
方式一:使用apache的beanutil 类型不匹配时会抛异常,属性覆盖问题需要自己逐一处理。
方式二:使用插件:beanConvert