BeanCopier的簡單使用
cglib包下的一個類.
簡單栗子
// 建立執行個體.
BeanCopier copier = BeanCopier.create(source.getClass(), target.getClass(), false);
// Copy操作
copier.copy(person1, person2, null);
注意到:
第三個參數userConverter,是否開啟Convert,預設BeanCopier隻會做同名,同類型屬性的copier,否則就會報錯.
舉個栗子:在兩對象複制過程中,難免會有某些字段屬性名相同,但類型不同的情況,例如 Date time,String time, long time.這三種,在轉換的時候如何處理。就需要自己寫方法對相應的類型進行修改.
簡單案例:
public class Test02 {
public static void main(String[] args) {
Person1 p1 = new Person1();
Person2 p2 = new Person2();
// 給p1指派
p1.setName("魯智深");
p1.setBirthday(new Date(L));
BeanCopier copier = BeanCopier.create(Person1.class, Person2.class, true);
// 根據需求編寫的DateConverter類, 需要實作Converter接口.
copier.copy(p1, p2, new DateConverter());
System.out.println(p1);
System.out.println(p2);
}
}
----------
import org.springframework.cglib.core.Converter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateConverter implements Converter {
@Override
public Object convert(Object value, Class target, Object context) {
// a.isAssignableFrom(b), 查資料:即a是b的父類或接口 || a和b為同一個類或同一個接口 則傳回true.
// SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value), 設定pattern并轉換時間格式.
return value.getClass().isAssignableFrom(Date.class) ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value) : value;
}
}
----------
import lombok.Data;
@Data
public class Person1 {
private String name;
private Date birthday;
}
----------
import lombok.Data;
@Data
public class Person2 {
private String name;
private String birthday;
}