在开发过程中经常需要深度复制对象,才用Spring的BeanCopier方案是个不错的选择。
直接看代码,先准备好实体类。
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class UserBean implements Serializable {
private static final long serialVersionUID = -6952319891279734655L;
private NameBean name;
private String phone;
private String sex;
private int age;
private Date birthdate;
private long money;
private Date createTime;
private String createUser;
private Date modifyTime;
private String modifyUser;
private String isValidate;
private String comments;
}
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class NameBean implements Serializable {
private static final long serialVersionUID = -2023200990550843496L;
private String firstName;
private String lastName;
private Date createTime;
private String createUser;
private Date modifyTime;
private String modifyUser;
private String isValidate;
private String comments;
}
import lombok.Data;
import java.beans.Transient;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Data
public class StudentBean {
private List<String> listTitle = new ArrayList<String>();
{
listTitle.add("Spring");
listTitle.add("Java");
}
private String name;
private String addr;
private String sex;
private int age;
private Date birthdate;
private Date createTime;
private String createUser;
private Date modifyTime;
private String modifyUser;
private String isValidate;
private String comments;
private NameBean nameBean;
}
import org.springframework.cglib.beans.BeanCopier;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Consumer;
import java.util.function.UnaryOperator;
public class CGlibMapper {
//使用缓存提高效率
private static final ConcurrentHashMap<String, BeanCopier> mapCaches = new ConcurrentHashMap<>();
/***
* 通过类复制属性(同一个类其实就是克隆自己) 属性相同才能复制
* @param source 需要复制的对象
* @param target 目标类
* @param <O>
* @param <T>
* @return
*/
public static <O, T> T mapper(O source, Class<T> target) {
return baseMapper(source, target);
}
/**
* 通过类复制属性(同一个类其实就是克隆自己) 属性相同才能复制
* @param source 需要复制的对象
* @param target 目标类
* @param action 支持lambda操作
* @param <O>
* @param <T>
* @return
*/
public static <O, T> T mapper(O source, Class<T> target, Consumer<T> action) {
T instance =