我想一個POJO對象的屬性複製到另一個不可變對象的生成器,像這樣:複製性能與春天
public class CopyTest {
// the source object
public static class Pojo1 {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
// the target object
public static class Pojo2 {
private final int value;
public Pojo2(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public static Pojo2Builder builder() {
return new Pojo2Builder();
}
// builder of the target object, maybe generated by lombok
public static class Pojo2Builder {
private int value;
private Pojo2Builder() {}
public Pojo2Builder value(int value) {
this.value = value;
return this;
}
public Pojo2 build() {
return new Pojo2(value);
}
}
}
public static void main(String[] args) {
Pojo1 src = new Pojo1();
src.setValue(1);
Pojo2.Pojo2Builder builder = Pojo2.builder();
// this won't work, provided by spring-beans
BeanUtils.copyProperties(src, builder);
Pojo2 target = builder.build();
}
}
的問題是: BeanUtils.copyProperties()
由spring-beans
提供不會撥打Pojo2Builder.value(int)
,因爲它不是setter
;
除了生成器類通常是由lombok生成所以無法命名方法Pojo2Builder.value(int)
作爲Pojo2Builder.setValue(int)
。
順便說一句,我已經做了它使用註冊一個定製的BeanIntrospector
由阿帕奇百科全書提供commons-beanutils
BeanUtilsBean.copyProperties()
,但我發現使用commons-beanutils
複製性能比使用spring-beans
當拷貝中的兩個不同之間發生的貴得多類,所以我更喜歡做這個使用spring-beans
所以是有可能的屬性複製到生成器類與Spring或其他一些公用事業這比commons-beanutils
更有效率?