BeanCopier是Cglib包中的一个类,用于对象的复制。

注意:目标对象必须先实例化  而且对象必须要有setter方法

初始化例子:


BeanCopier copier = BeanCopier.create(Source.class, Target.class, false);
copier.copy(source, target, null);

第三个参数useConverter,是否开启Convert。 默认BeanCopier只会做同名,同类型属性的copier,否则就会报错。如果类型需要转换比如Date转换成String则自定义Convert类实现Convert接口。

下例用到 父类Class.isAssignableFrom(子类Class)方法 这个方法用于判断子类是否属于父类,有人问为什么不用instanceOf, instanceOf用于判断类与类直接的关系,而isAssignableFrom可以用于接口直接的子父关系。

父类Class.isAssignableFrom(子类Class)

import java.util.Date;
import net.sf.cglib.beans.BeanCopier;
import net.sf.cglib.core.Converter;
import org.junit.Test;
import com.ibm.icu.text.SimpleDateFormat;
/**
*
* @author Test
* @createDate 2014-5-31上午09:50:18
* @className BeanCopierTest.java
*
*/
public class BeanCopierTest {
@Test
public void beanCopierTest() {
Address1 a1 = new Address1("LA", new Date());
Address1 a2 = new Address1();
a2 = a1;
// 这种复制修改会造成a1对象的数据进行修改
a2.setName("WA");
System.out.println(a1);
Address2 a3 = new Address2();
// 这样就只能使用其他拷贝方法 BeanCopier
BeanCopier beanCopier = BeanCopier.create(Address1.class,
Address2.class, true);
beanCopier.copy(a1, a3, new DateStringConverter());
System.out.println(a3);
System.out.println(a1);
}
}
class Address1 {
private String name;
private Date date;
public Address1() {
}
public Address1(String name, Date date) {
super();
this.name = name;
this.date = date;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "名字:" + this.name + " 时间:" + this.date;
}
}
class Address2 {
private int id;
private String name;
private String date;
public Address2() {
}
public Address2(String name, String date) {
super();
this.name = name;
this.date = date;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
@Override
public String toString() {
return "" + this.id + " 名字:" + this.name + " 时间:" + this.date;
}
}
/**
*
* @author Test
* @createDate 2014-5-31上午10:21:50
* @className BeanCopierTest.java
* @useFor 用于转换类型 比如 Address1中的Date类型 转成String
*/
class DateStringConverter implements Converter {
@SuppressWarnings("all")
@Override
/**
* @author Test
* @createDate 2014-5-31
* @params value是Src对象  target是From对象 context是From类中的方法名
* @return void
* @useFor 实现转换方法
*/
public Object convert(Object value, Class target, Object context) {
System.out.println(value.getClass() + " " + value); // Src对象
System.out.println(target); // From对象
System.out.println(context.getClass() + " " + context); // String对象,具体的方法名
if (value.getClass().isAssignableFrom(Date.class)) {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value);
} else {
return value;
}
}
}

参考: http://blog.csdn.net/shuwei003/article/details/7971685

BeanCopier对象复制学习相关推荐

  1. SpringBoot 如何进行对象复制,老鸟们都这么玩的!

    ‍‍ ‍‍今天来聊聊在日常开发中如何优雅的实现对象复制. 首先我们看看为什么需要对象复制? 为什么需要对象复制 如上,是我们平时开发中最常见的三层MVC架构模型,编辑操作时Controller层接收到 ...

  2. jQuery简介、引入jQuery、jQuery核心函数、jQuery对象、jQuery对象操作class、addclass补充、jQuery对象复制——jQuery

    目录 一.jQuery简介 二.引入jQuery 三.jQuery核心函数 四.jQuery对象 五.jQuery对象操作class 六.addClass补充 七.jQuery对象复制 一.jQuer ...

  3. BeanCopier 对象拷贝

    BeanCopier 对象拷贝 对象拷贝转为其他类的对象 对象数组拷贝转为其他类的对象数组 import java.util.List; import java.util.Map; import ja ...

  4. php5对象复制、clone、浅复制与深复制的区别与介绍

    对象复制的由来  为什么对象会有"复制"这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 PHP代码 * /**      * * 电视机类     ...

  5. PHP写时复制, 变量复制和对象复制不同!!!

    2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...

  6. Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

  7. 原型模式(ProtoType) - Java里的对象复制

    一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...

  8. java对象复制到新对象_java – 使用新生成的ID将Hibernate复制对象值复制到新对象中...

    我正在使用带有一些嵌套表的单列pk的关系数据库.我需要在项目中添加简单的归档.归档仅在应用程序到达特定状态时发生,因此我希望将现有的hibernate对象复制到新实例中,新实例将使用新ID保存,同时保 ...

  9. java反射克隆对象_Java反射 - 2(对象复制,父类域,内省)

    为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...

最新文章

  1. android combobox控件,Android中的组合框
  2. 信息检索及DM必备知识总结:luncene
  3. C#委托,事件理解入门 (译稿)
  4. windows配置samba客户端_如何搭建与Windows客户机结合使用的Samba文件服务器?
  5. python虚拟环境安装的包在哪_如何使用virtualenv引导脚本在虚拟环境中安装python包?...
  6. 模型如何京东培训6万人
  7. Airflow 中文文档:使用Mesos扩展(社区贡献)
  8. matlab GUI 设计
  9. HBase集成(准备篇)
  10. python内嵌浏览器_内嵌web浏览器
  11. 华为电脑管家PcManager多屏协同功能破解
  12. C语言strcmp函数用法
  13. 修改apk中的服务器域名,战神引擎架设四:修改apk客户端里面的域名和app签名
  14. 微信小程序怎样关闭直播插件
  15. 软件开发项目各阶段交付物列表
  16. 这份Java日志格式规范,拿走不谢!
  17. 真正的人工智能能实现吗_如何实现真正的人工智能
  18. mysql 汉字笔画排序规则_SQL Server 与 MySQL 中排序规则与字符集相关知识的一点总结...
  19. 常见的的水生植物图像
  20. 蓝牙技术基础知识总结笔记1 - 蓝牙版本及 4.0 和 BLE 的关系等

热门文章

  1. 访问项目无法访问 此网站192.168.*** 拒绝了我们的连接请求。
  2. Zookeeper实战之客户端Curator vs zkClient
  3. 2019中国智能制造十大发展趋势
  4. Makefile编写和使用技巧
  5. oracle静默创建实例linux,linux CentOS7下快速静默安装Oracle11GR2数据库并创建实例
  6. 2345恶意篡改主页解决
  7. taro 项目中接入EChart图表库
  8. PLSQL开发笔记和小结
  9. UVA 10004 Bicoloring (二分染色)
  10. jvm 调优实战经验(结合jstat、jstack、procexp)