copy bean 有三种方式:
1. 使用BeanUtil, 但是BeanUtil 却有严重的性能问题。
2. 比较愚蠢的手动get/set的方式,对于get/set方式是最为容易把代码写的非常冗长, 不方便阅读。
3.使用BeanCopier,这也是今天介绍的copy bean的方式。
BeanCopier是属于cglib包里的API。
BeanCopier/BeanUtil的性能对比测试。BeanCopier的性能会比 BeanUtil的性能高100数量级。
BeanCopier copy = BeanCopier.create(Bean.class, Bean2.class, false);
Bean source = new Bean();
Bean2 target = new Bean2();
long t = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
copy.copy(source, target, null);
}
System.out.println(System.currentTimeMillis() - t);
由于构造BeanCopier是消耗很多性能的, 在执行复杂操作的时候, 最好能现缓存 这个对象, 不然容易发生一样的性能问题。
但是这并不能成为不采用CGLIB提供的BeanCopier的方式得理由。 使用这种方式执行100W次COPY, 时间不到500ms。由此可看到它的性能是非常高的。BeanCopier.copy(source, target, Convert)方法可以提供自定义的转换方式, 具体怎么用,大家去看看cglib的帮助。
这个是对性能有要求, 高并发的情形下使用的, 如果你系统压力不高, 请使用BeanUtil吧。
//这个测试, 类 Bean/Bean2用了大约40个属性对象。各种类型都有。
//test code
import java.lang.reflect.InvocationTargetException;
import org.apache.commons.beanutils.BeanUtils;
import net.sf.cglib.beans.BeanCopier;
public class CGLibTest {
public static void main(String[] args) {
BeanCopier copy = BeanCopier.create(Bean.class, Bean2.class, false);
Bean source = new Bean();
Bean2 target = new Bean2();
long t = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
copy.copy(source, target, null);
}
System.out.println(System.currentTimeMillis() - t);
Bean source2 = new Bean();
try {
BeanUtils.copyProperties(source2, target);
BeanUtils.copyProperties(source2, target);
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InvocationTargetException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
t = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
try {
BeanUtils.copyProperties(source2, target);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(System.currentTimeMillis() - t);
}
}
分享到:
相关推荐
BeanUtil是一个常用的Java工具库,主要用于对象与数据库之间的数据转换,简化了数据库操作中的数据绑定过程。这个工具库使得开发者可以更加便捷地处理Java Bean和SQL查询结果之间的映射,提高了开发效率。在Java开发...
BeanUtil框架是一个在Java开发中常用的工具库,主要用于对象属性的获取、设置、拷贝以及类型转换等操作。它的设计目标是简化Java Bean的操作,提高代码的可读性和可维护性。这个“BeanUtil框架完整包”包含了...
BEANutil工具类,可获取生日,简单的几行代码,给需要的你。BEANutil工具类,可获取生日,简单的几行代码,给需要的你。
4. **类型转换**:BeanUtil在设置属性值时,会自动进行类型转换,只要目标属性类型与传入值可以相互转换,它就能完成这个过程,极大地提高了代码的健壮性。 5. **自定义转换规则**:除了内置的类型转换机制,...
这些方法能够自动处理基本类型与包装类型的转换,以及处理空值和异常情况。 2. `PropertyUtils`: 这个类扩展了BeanUtils的功能,增加了对复杂属性操作的支持,例如获取或设置嵌套的bean属性,以及对数组、集合和Map...
BeanUtil.java
BeanUtil 主要用于实体Bean和Map之间的互转,使用方便,是一个不可多得的工具类哦
BeanUtil属性拷贝工具类,支持基本的javabean属性拷贝,通过java反射和泛型编程实现了list属性拷贝
修改内容: 1.org.apache.commons.beanutils.converters包下增加了UtilDateConverter类 2.修改了org.apache.commons.beanutils.... 支持BeanUtils的copyProperty方法对String与java.util.Date互转 <br>
《BeanUtil1.8源码与jar包解析》 BeanUtil是Apache Commons项目中的一个工具类库,主要用于处理Java Bean的操作,提供了一系列便捷的方法来简化Java Bean的属性操作。在这个"BeanUtil1.8 SRC 源码和 jar包"中,包含...
BeanUtil需要的jar包和源码文件,commons-beanutils-1.8.0.jar,commons-beanutils-1.8.0-javadoc.jar,commons-beanutils-1.8.0-sources.jar,commons-beanutils-bean-collections-1.8.0.jar,commons-beanutils-...
beanutil的的jar包 大家顶啦
使用JCL,开发者只需要编写与JCL API相关的代码,无需关心底层的日志实现,这样可以提高代码的灵活性和可移植性。 下面,我们详细分析一下这两个库在实际开发中的应用场景: 1. **BeanUtil的应用**: - **属性...
同样,对于更新操作,BeanUtil可以比较旧Bean和新Bean的属性差异,生成UPDATE语句;对于删除操作,通常只需要根据Bean的主键生成DELETE语句;而对于查询,可能需要手动定义SQL语句或者利用MyBatis的动态SQL功能。 ...
common-beanutil的源代码 1.8.1
beanutil_1.8.3_API
本文将深入探讨BeanUtil工具类的工作原理以及如何在Servlet中使用它。 首先,让我们理解一下JavaBean的概念。JavaBean是一种遵循特定规范的Java类,主要用于封装数据。它通常具有公有构造器、公有getter和setter...
BeanUtil.java,对象属性拷贝工具
BeanUtils是Java开发中常用的工具包,它提供了对Java Bean操作的各种便利方法,如属性的设置与获取,类型转换等。 **描述分析:** 描述中提到了三个关键组件: 1. **commons-beanutils-1.9.3**:这是Apache ...
这个"commons-beanutil-1.7.0-src"压缩包包含了BeanUtils库的源代码,版本号为1.7.0,是开发者理解和自定义此库功能的重要资源。以下是关于Apache Commons BeanUtils库及其1.7.0版本的一些关键知识点: 1. **...