BeanCopier 实现 值传递
2016-04-14 20:47
253 查看
不同类型的对象赋值(省去一个个set,get的麻烦,优化代码),通过反射来实现 ,倘若对象里面包含对象,此方法也能赋值的,Contract 包含attachments(一个对象)
public static Contract convertContractDtoFromKAD(com.dianping.contract.dto.Contract contract) {
if (contract == null) {
return null;
}
Contract contractTmp = new Contract();
BeanCopier.create(contract.getClass(), contractTmp.getClass(), false).copy(contract, contractTmp, null); // 不同类型的对象赋值(省去一个个set的麻烦,优化代码)
return contractTmp;
}
倘若有的变量没有,单独再set 。
public static Contract convertContractDtoFromDPT(com.dianping.contractinfo.dto.Contract contract) {
if (contract == null) {
return null;
}
Contract contractTmp = new Contract();
BeanCopier.create(contract.getClass(), contractTmp.getClass(), false).copy(contract, contractTmp, null);
contractTmp.setTuan2Tui(false);
contractTmp.setExternalID(0);
return contractTmp;
}
copier = BeanCopier.create(source.getClass(), target.getClass(), false);
copier.copy(source, target, null);
Create对象过程:产生sourceClass-》TargetClass的拷贝代理类,放入jvm中,所以创建的代理类的时候比较耗时。最好保证这个对象的单例模式,可以参照最后一部分的优化方案。
创建过程:源代码见jdk:net.sf.cglib.beans.BeanCopier.Generator.generateClass(ClassVisitor)
1、 获取sourceClass的所有public get 方法-》PropertyDescriptor[] getters
2、 获取TargetClass 的所有 public set 方法-》PropertyDescriptor[] setters
3、 遍历setters的每一个属性,执行4和5
4、 按setters的name生成sourceClass的所有setter方法-》PropertyDescriptor getter【不符合javabean规范的类将会可能出现空指针异常】
5、 PropertyDescriptor[] setters-》PropertyDescriptor setter
6、 将setter和getter名字和类型 配对,生成代理类的拷贝方法。
Copy属性过程:调用生成的代理类,代理类的代码和手工操作的代码很类似,效率非常高。
public static Contract convertContractDtoFromKAD(com.dianping.contract.dto.Contract contract) {
if (contract == null) {
return null;
}
Contract contractTmp = new Contract();
BeanCopier.create(contract.getClass(), contractTmp.getClass(), false).copy(contract, contractTmp, null); // 不同类型的对象赋值(省去一个个set的麻烦,优化代码)
return contractTmp;
}
倘若有的变量没有,单独再set 。
public static Contract convertContractDtoFromDPT(com.dianping.contractinfo.dto.Contract contract) {
if (contract == null) {
return null;
}
Contract contractTmp = new Contract();
BeanCopier.create(contract.getClass(), contractTmp.getClass(), false).copy(contract, contractTmp, null);
contractTmp.setTuan2Tui(false);
contractTmp.setExternalID(0);
return contractTmp;
}
copier = BeanCopier.create(source.getClass(), target.getClass(), false);
copier.copy(source, target, null);
Create对象过程:产生sourceClass-》TargetClass的拷贝代理类,放入jvm中,所以创建的代理类的时候比较耗时。最好保证这个对象的单例模式,可以参照最后一部分的优化方案。
创建过程:源代码见jdk:net.sf.cglib.beans.BeanCopier.Generator.generateClass(ClassVisitor)
1、 获取sourceClass的所有public get 方法-》PropertyDescriptor[] getters
2、 获取TargetClass 的所有 public set 方法-》PropertyDescriptor[] setters
3、 遍历setters的每一个属性,执行4和5
4、 按setters的name生成sourceClass的所有setter方法-》PropertyDescriptor getter【不符合javabean规范的类将会可能出现空指针异常】
5、 PropertyDescriptor[] setters-》PropertyDescriptor setter
6、 将setter和getter名字和类型 配对,生成代理类的拷贝方法。
Copy属性过程:调用生成的代理类,代理类的代码和手工操作的代码很类似,效率非常高。
相关文章推荐
- Centos 7服务器搭建(二)—安装MySQL
- 1.1.2 Linux之前UNIX的历史(2)
- Idea或一切Tomcat运行的软件,解决端口被占用的问题:
- libev中timer时间事件监控器
- semop SEM_UNDO
- hadoop、storm和spark的区别、比较
- CentOS下使用命令行测试网速
- flume之集群监控 Ganglia 部署配置
- JavaWeb学习总结(三)——Tomcat服务器学习和使用(二)
- Centos 7服务器搭建(一)—最小化安装
- PropertiesDemo
- Linux内核分析(八)
- Linux 文件系统:procfs, sysfs, debugfs 用法简介
- Hadoop MapReduce 配置加载机制
- opengl纹理贴图是黑白的原因
- Linux ssh远程命令启动
- Linux命令之ss
- 64位linux c+nasm混合编程 gcc编译报错
- tomcat部署HelloWorld出错。
- Linux手动挂载硬盘且添加到文件