文档章节

使用 BeanCopier 复制对象

G
 Galanodel
发布于 2017/05/05 09:34
字数 326
阅读 29
收藏 0

Cglib是一款比较底层的操作java字节码的框架。

BeanCopier是一个工具类,可以用于Bean对象内容的复制。

复制Bean对象内容的方法有很多,比如自己手动get set ,或者使用PropertyUtils或者使用BeanUtils

 

BeanCopier与 PropertyUtils 、BeanUtils的不同在于:

PropertyUtils 和 BeanUtils 使用的是反射机制来完成属性的复制。

而BeanCopier 的原理是通过字节码动态生成一个类,这个里面实现get 和 set方法。(性能和对象直接调用set一样)

BeanCopier 唯一的花销是生成动态类上,但是生成的后的象可以自己保存起来反复使用。

根据网上的资料 BeanCopier的性能是PropertyUtils (apache-common)的500倍。 PropertyUtils的性能是BeanUtils(apache-common)的2倍。

 

以下是使用例子

import net.sf.cglib.beans.BeanCopier;

public class BeanCopierTest {
	public static void main(String[] args) {
		Bean1 bean1 = new Bean1();
		Bean2 bean2 = new Bean2();
		bean1.setValue("hello");
		BeanCopier copier = BeanCopier.create(Bean1.class, Bean2.class, false);
		copier.copy(bean1, bean2, null);

		System.out.println(bean2.getValue());
	}

	static class Bean1 {
		private String value;
		public String getValue() {
			return value;
		}
		public void setValue(String value) {
			this.value = value;
		}
	}
	static class Bean2 {
		private String value;
		public String getValue() {
			return value;
		}
		public void setValue(String value) {
			this.value = value;
		}
	}
}

 

注意事项:BeanCopier在复制的时候使用get和set方法了。如果方法定义不严格,会造成复制的对象属性值不正确。

 

© 著作权归作者所有

G
粉丝 2
博文 72
码字总数 49356
作品 0
海淀
高级程序员
私信 提问
四种对象属性的复制

比较的是四种复制的方式,分别为Apache的BeanUtils和PropertyUtils,Spring的BeanUtils,Cglib的 BeanCopier。做法是在Eclipse新建了一个Project,专门用于专门测试几种代码的性能。具体的代码...

李永china
2016/05/12
52
0
BeanCopier完成对象Copy

在做业务的时候,我们有时为了隔离变化,会将DAO查询出来的Entity,和对外提供的DTO隔离开来。大概90%的时候,它们的结构都是类似的,但是我们很不喜欢写很多冗长的b.setF1(a.getF1())这样的...

有资本再款
2016/12/03
5
0
对象拷贝类cglib的使用实例

目前流行的较为公用认可的工具类: Apache的两个版本:(反射机制) org.apache.commons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig)org.apache.commons.beanutils.......

卯金刀GG
2016/10/13
18
0
BeanCopier 值拷贝NULL问题?

BeanCopier 进行copy时如何对源对象为null的属性不进行拷贝?

张树恒
2018/04/14
339
0
AutoTableBindPlugin,帮忙,谢谢。

@绝望的八皮 你好,想跟你请教个问题: 我在使用Ext包中的AutoTableBindPlugin时,ClassSearcher中出现错误,提示: Caused by: com.jfinal.ext.kit.ReflectException: java.lang.ClassNotFo...

云淡风轻0415
2015/08/06
175
2

没有更多内容

加载失败,请刷新页面

加载更多

AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
24分钟前
2
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
3
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
3
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
3
0
nginx-rtmp-module的缺陷分析(二)

nginx-rtmp-module使用指令push和pull来relay媒体流数据,以便分布式部署服务。 当nginx-rtmp-module作为边缘服务器(一般不会向边缘服务器推流)时,使用pull从源服务器获取媒体流数据,俗称...

YoungSagit
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部