BeanCopier对象复制学习
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对象复制学习相关推荐
- SpringBoot 如何进行对象复制,老鸟们都这么玩的!
今天来聊聊在日常开发中如何优雅的实现对象复制. 首先我们看看为什么需要对象复制? 为什么需要对象复制 如上,是我们平时开发中最常见的三层MVC架构模型,编辑操作时Controller层接收到 ...
- jQuery简介、引入jQuery、jQuery核心函数、jQuery对象、jQuery对象操作class、addclass补充、jQuery对象复制——jQuery
目录 一.jQuery简介 二.引入jQuery 三.jQuery核心函数 四.jQuery对象 五.jQuery对象操作class 六.addClass补充 七.jQuery对象复制 一.jQuer ...
- BeanCopier 对象拷贝
BeanCopier 对象拷贝 对象拷贝转为其他类的对象 对象数组拷贝转为其他类的对象数组 import java.util.List; import java.util.Map; import ja ...
- php5对象复制、clone、浅复制与深复制的区别与介绍
对象复制的由来 为什么对象会有"复制"这个概念,这与PHP5中对象的传值方式是密切相关的,让我们看看下面这段简单的代码 PHP代码 * /** * * 电视机类 ...
- PHP写时复制, 变量复制和对象复制不同!!!
2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...
- Java反射 - 2(对象复制,父类域,内省)
为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...
- 原型模式(ProtoType) - Java里的对象复制
一, 引用的复制和对象复制. 在编程中, 我们有时会用两个引用指向同一个对象. 例如: ArrayList a = new ArrayLIst(); ArrayList b = a; 看起来好像有a, ...
- java对象复制到新对象_java – 使用新生成的ID将Hibernate复制对象值复制到新对象中...
我正在使用带有一些嵌套表的单列pk的关系数据库.我需要在项目中添加简单的归档.归档仅在应用程序到达特定状态时发生,因此我希望将现有的hibernate对象复制到新实例中,新实例将使用新ID保存,同时保 ...
- java反射克隆对象_Java反射 - 2(对象复制,父类域,内省)
为什么要复制对象?假设有个类Car,包含name,color2个属性,那么将car1对象复制给car2对象,只需要car2.setName(car1.getName)与car2.setColor(ca ...
最新文章
- android combobox控件,Android中的组合框
- 信息检索及DM必备知识总结:luncene
- C#委托,事件理解入门 (译稿)
- windows配置samba客户端_如何搭建与Windows客户机结合使用的Samba文件服务器?
- python虚拟环境安装的包在哪_如何使用virtualenv引导脚本在虚拟环境中安装python包?...
- 模型如何京东培训6万人
- Airflow 中文文档:使用Mesos扩展(社区贡献)
- matlab GUI 设计
- HBase集成(准备篇)
- python内嵌浏览器_内嵌web浏览器
- 华为电脑管家PcManager多屏协同功能破解
- C语言strcmp函数用法
- 修改apk中的服务器域名,战神引擎架设四:修改apk客户端里面的域名和app签名
- 微信小程序怎样关闭直播插件
- 软件开发项目各阶段交付物列表
- 这份Java日志格式规范,拿走不谢!
- 真正的人工智能能实现吗_如何实现真正的人工智能
- mysql 汉字笔画排序规则_SQL Server 与 MySQL 中排序规则与字符集相关知识的一点总结...
- 常见的的水生植物图像
- 蓝牙技术基础知识总结笔记1 - 蓝牙版本及 4.0 和 BLE 的关系等
热门文章
- 访问项目无法访问 此网站192.168.*** 拒绝了我们的连接请求。
- Zookeeper实战之客户端Curator vs zkClient
- 2019中国智能制造十大发展趋势
- Makefile编写和使用技巧
- oracle静默创建实例linux,linux CentOS7下快速静默安装Oracle11GR2数据库并创建实例
- 2345恶意篡改主页解决
- taro 项目中接入EChart图表库
- PLSQL开发笔记和小结
- UVA 10004 Bicoloring (二分染色)
- jvm 调优实战经验(结合jstat、jstack、procexp)