`

PropertyUtils.copyProperties()用法和性能

 
阅读更多

BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度。

使用PropertyUtils.copyProperties()拷贝一个bean中的属性到另一个bean中,第一个参数是目标bean,第二个参数是源bean。

例一
Book srcBook = new Book();
srcBook.setName("Java");
Book destBook = new Book();
PropertyUtils.copyProperties(destBook, srcBook);
System.out.println(destBook.getName());
 
 
例二(对删除的数据进行备份)
Student s = new Student();
s.setName("xy")
................
StudentBak sbak = new StudentBak();
PropertyUtils.copyProperties(sbak , s);
StudentBakDao.save(sbak);
StudentDao.delete(s);
 
没有PropertyUtils.copyProperties,我们只能
StudentBak sbak = new StudentBak();
sbak.setName(s.getName);
.........................
如果有是十个属性,我们不是累呆了。


该方法做对象的拷贝很方便,但是它的性能问题相当差
 
看下面的测试代码:
public class A
{
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}

import org.apache.commons.beanutils.PropertyUtils;
public class PropertyUtilsTest
{
public static void main(String []args)
{

 

普通的copy,每个字段拷贝
A a1 = new A();
a1.setName("wang");

A a2 = new A();
long b = new java.util.Date().getTime();
a2.setName(a1.getName());

long e = new java.util.Date().getTime();
System.out.println("time1="+(e-b));
 
try
{
PropertyUtils.copyProperties方法copy
A a3 = new A();
b = new java.util.Date().getTime();
PropertyUtils.copyProperties(a3, a1);
e = new java.util.Date().getTime();
System.out.println("time2="+(e-b));

}
 
catch (Exception e1)
{
e1.printStackTrace();
}
}
}

最后输出:
time1=0
time2=265


分享到:
评论

相关推荐

    浅谈java对象之间相互转化的多种方式

    使用 org.apache.commons.beanutils.PropertyUtils.copyProperties() 方法可以将一个 bean 中的属性拷贝到另一个 bean 中。这个方法的第一个参数是目标 bean,第二个参数是源 bean。这种方法的特点是: * 性能问题...

    commons-beanutils所有版本(1.0-1.9.2).zip

    例如,`PropertyUtils.getProperty()`和`PropertyUtils.setProperty()`可以用来获取和设置属性值。 3. **类型转换**: BeanUtils库还包含一个强大的类型转换机制,允许在不同数据类型之间自动转换,如`ConvertUtils....

    commons-beanutils-1.8.0

    通过`PropertyUtils.getProperty()`和`PropertyUtils.setProperty()`方法,可以实现对JavaBean属性的读写操作。 2. **类型转换**:BeanUtils具有自动类型转换的能力,它可以将字符串、数字等不同类型的值转换为...

    beanutils的jar包

    例如,你可以使用`BeanUtils.copyProperties()`方法轻松地将一个对象的属性值复制到另一个对象,而无需显式地列出所有属性。 其次,BeanUtils提供了类型转换功能。在处理用户输入或从不同数据源获取数据时,数据...

    dom4j+jstl+beanUtils+log4j

    下面将详细解释这些库的主要用途和使用方法。 1. DOM4J: DOM4J是一个Java库,用于处理XML文档。它提供了一种灵活且高性能的方式来解析、创建、修改和操作XML数据。DOM4J支持SAX和DOM解析,同时也提供了基于事件的...

    -beanutils-1.9.4.zip

    例如,`PropertyUtils.getProperty()`和`PropertyUtils.setProperty()`方法可以无须手动创建setter和getter方法,直接通过属性名操作对象的属性值。 2. **类型转换:** BeanUtils包含了一套强大的类型转换机制,能...

    Beanutils相关资料

    在性能敏感的代码中,可以考虑使用直接调用setter和getter方法的方式。 9. **最佳实践** - 当属性类型匹配时,直接使用BeanUtils是非常合适的。但如果属性类型不一致,需要自定义转换逻辑,或者处理复杂的业务场景...

    JavaBeanutils-1.8.3

    1. **属性访问**:JavaBeanUtils包含`PropertyUtils`类,它提供了`getProperty()`和`setProperty()`方法,可以方便地读取和设置Java Bean的属性,无需关心属性的getter和setter方法的具体实现。例如,通过`...

    cors-filter-1.7.jar,Java-property-utils-1.9.jar

    在Java Property Utils的使用上,开发者可以使用提供的API读取属性文件,例如`PropertyUtils.getProperty()`用于获取属性值,`PropertyUtils.setProperty()`用于设置属性值,以及`PropertyUtils.copyProperties()`...

    beanUtils , CopyProperty

    `copyProperties`方法的使用方式如下: ```java import org.apache.commons.beanutils.BeanUtils; public class Main { public static void main(String[] args) throws Exception { Source source = new Source...

    commons-beanutils-1.8.0.rar

    例如,`BeanUtils.copyProperties()`可以将一个对象的所有属性值复制到另一个对象,而`BeanUtils.getProperty()`和`BeanUtils.setProperty()`则用于获取和设置特定属性值。 2. **类型转换**:BeanUtils还提供了自动...

    commons-beanutils

    虽然BeanUtils库提供了便利,但在大量使用时需要注意性能问题,因为反射操作相比直接的getter/setter方法调用会有一定的性能损耗。在关键路径或性能敏感的代码中,可能需要权衡是否使用BeanUtils。 9. **使用示例*...

    commons-beanutils-1.9.1-bin.zip

    4. **简化代码**:通过使用BeanUtils,开发者可以减少编写getter和setter方法的代码,提高代码的可读性和维护性。 然而,尽管BeanUtils提供了许多便利,但也需要注意一些潜在的问题。例如,属性访问可能会抛出`...

    commons-beanutils-1.9.3

    - `commons-beanutils-1.9.3-javadoc.jar`包含了API文档,开发人员可以通过这些文档了解每个类和方法的具体用法和功能。 - `commons-beanutils-1.9.3-tests.jar`包含了测试代码,这些测试用例展示了如何使用...

    Java反射操作(需要commons-beanutils-1.8.2.jar)

    在实际开发中,使用反射时需要注意性能问题,因为反射操作比常规方法调用慢。另外,反射可能导致安全风险,因为它可以访问和修改私有成员,所以应谨慎使用。 总结来说,Java反射操作结合Apache Commons BeanUtils库...

    commons-beanutils-1.8.0-BETA.zip

    在Java开发中,BeanUtils库极大地简化了对象属性的获取和设置,使得开发者能够更加专注于业务逻辑,而不是繁琐的getter和setter方法。这个库的1.8.0-BETA版本是我们今天要讨论的重点。 Apache Commons BeanUtils ...

    beanutils-1.8.3开发包

    1. **属性操作**:使用`PropertyUtils`类,可以方便地读取和设置JavaBean的任何属性,即使属性是嵌套的或者需要转换类型。 2. **复制属性**:`BeanUtils.copyProperties()`方法可以将一个对象的所有属性值复制到另...

    commons-beanutils 源码

    - 在`PropertyUtils`类中,可以看到对`java.lang.reflect.Method`和`java.lang.reflect.Field`的大量使用,它们用于查找和调用对象的属性方法。 3. **异常处理策略** - BeanUtils在处理异常时,通常会捕获并包装...

Global site tag (gtag.js) - Google Analytics