天天看點

BeanCopier的簡單使用

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;
}