1. 背景
之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。
不推荐的主要理由是:
-
有些属性拷贝工具性能有点差
-
有些属性拷贝工具有“BUG”
-
使用属性拷贝工具容易存在一些隐患(后面例子会讲到)
2. 示例
首先公司内部就遇到过 commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例,然后该同事换成了 Spring 的 BeanUtils 性能好了很多,感兴趣大家可以使用性能测试框架或者基准测试框架去对比,这里就不对比了。
接下来我们看 Spring 的 BeanUtils 的属性拷贝会存在啥问题:
import lombok.Data; import java.util.List; @Data public class A { private String name; private List<Integer> ids; }
@Data public class B { private String name; private List<String> ids; }
import org.springframework.beans.BeanUtils; import java.util.Arrays; public class BeanUtilDemo { public static void main(String[] args) { A first = new A(); first.setName("demo"); first.setIds(Arrays.asList(1, 2, 3)); B s