BeanCopier对象复制学习
2017-04-11 10:55
169 查看
BeanCopier是Cglib包中的一个类,用于对象的复制。
注意:目标对象必须先实例化 而且对象必须要有setter方法
初始化例子:
第三个参数useConverter,是否开启Convert。默认BeanCopier只会做同名,同类型属性的copier,否则就会报错。如果类型需要转换比如Date转换成String则自定义Convert类实现Convert接口。
下例用到父类Class.isAssignableFrom(子类Class)方法 这个方法用于判断子类是否属于父类,有人问为什么不用instanceOf,instanceOf用于判断类与类直接的关系,而isAssignableFrom可以用于接口直接的子父关系。
参考:http://blog.csdn.net/shuwei003/article/details/7971685
注意:目标对象必须先实例化 而且对象必须要有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
相关文章推荐
- NO.73 [bean]Arch4用业务大对象的复制工具类BizVoUtils
- 巴巴运动网学习笔记三之产品分类实体对象基本属性的JPA映射,用泛型技术对产品分类的业务管理Bean抽象,单元测试产品分类的业务管理Bean.,重载业务管理Bean的删除方法,
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象
- Programming in Objective-C 学习笔记09——对象复制与归档
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier
- C++学习笔记之(对象复制的困惑)
- OpenCv学习笔记(四)--Mat基本图像容器Mat对象信息头,矩阵体的创建,深复制,浅复制详解
- Java学习笔记----你可能不知道那些知识,对象复制与引用
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
- java两个相同Bean对象复制
- 【IPHONE开发-OBJECTC入门学习】复制对象,深浅复制
- 【IPHONE开发-OBJECTC入门学习】复制对象,深浅复制
- 深入学习理解jQuery中的extend方法以及JavaScript中对象的复制
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之18-复制对象——黑马 IOS 技术博客
- Java反射之复制简单的JavaBean对象
- 【Python学习笔记】list/dict对象复制的误区与正确方法
- C++ primer 学习记录:面对对象编程之构造函数和复制控制
- 【IOS 开发学习总结-OC-27】★★objective-c之foundation 框架——对象复制
- Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)