BeanCopier坑

2021-04-20

java

志不强者智不达。——《墨子·修身》

今天使用org.springframework.cglib.beans.BeanCopier时遇到一个坑

这里记录一下

BeanCopier用于拷贝属性,详情可以看mofan的博客,写的很详细了

我们这里写两个对象用于测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public static class Monkey {
private String name;
private Integer age;
}

@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public static class Cat {
private String name;
private Integer age;
}

我们测试一下

1
2
3
4
5
6
7
public static void main(String[] args) {
BeanCopier beanCopier = BeanCopier.create(Monkey.class, Cat.class, false);
Monkey monkey = Monkey.builder().name("ruben").age(12).build();
Cat cat = Cat.builder().build();
beanCopier.copy(monkey, cat, null);
System.out.println(cat);
}

可以看到输出结果,我们成功把Monkey对象里的值拷贝到Cat中去了

image-20210420205540345

但如果我们在Cat加入了链式

1
2
3
4
5
6
7
8
9
10
@Data
@Builder
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public static class Cat {
private String name;
private Integer age;
}

我们再次运行

image-20210420205608789

可以看到我们的Monkey对象里的值没有拷贝到Cat里去

所以这个坑就是

BeanCopier拷贝属性,不支持链式编程!!!