`

关于BeanUtils.copyProperties的使用

阅读更多

spring和apache commons-beanutils中分别存在一个BeanUtils,提供了对java bean的常用操作。

之前在写程序时,用到了两个不同类型但属性基本相同的对象的拷贝,结果在拷贝java.util.Date类型的对象属性时,由于其值为null,而抛异常。

由于时间紧急,所以临时改成了get/set方式,幸亏对象的属性不算多。

后来一直耿耿于怀这个问题,今天抽空看了一下spring和apache commons-beanutils包中BeanUtils.copyProperties的实现。

spring中实现的方式很简单,就是对两个对象中相同名字的属性进行简单get/set,仅检查属性的可访问性。

而commons-beanutils则施加了很多的检验,包括类型的转换,甚至于还会检验对象所属的类的可访问性。

而且,commons-beanutils中的装换是不支持java.util.Date的。除了支持基本类型以及基本类型的数组之外,还支持java.sql.Date, java.sql.Time, java.sql.TimeStamp, java.io.File, javaio.URL这些类的对象,其余一概不支持。不过你可以自定义你的类的Converter。然后注册进去。

感觉commons-beanutils包中的这个BeanUtils类的copyProperties方法,太过复杂,约束太多,而且使用不便,虽然可扩展性好了,但是易用性不高。

总结:

关于bean复制,如果属性较少,建议直接写个方法完成get/set即可。如果属性较多,可以自己采用反射实现一个满足自己需要的工具类,或者使用spring的那个beanutils类,不建议使用commons-beanutils包中的那个BeanUtils类,刚看了下,这个类对于内部静态类的对象复制也会出现问题,检验太复杂了,常会出现一些诡异的问题。毕竟我们bean复制一般就是简单的属性copy而已。

而且,由于这些BeanUtils类都是采用反射机制实现的,对程序的效率也会有影响。因此,慎用BeanUtils.copyProperties!!!

分享到:
评论

相关推荐

    BeanMapper:比BeanUtils.copyProperties更快

    一个BeanUtils.copyProperties的小型快速替代。 起因 由于BeanUtils(Spring或Apache Commons)的copyProperties实现是利用反射实现的,它在大量调用时具有比较严重的性能问题。 BeanMapper通过javassist类库实现在...

    java Beanutils.copyProperties( )用法详解

    在实际开发中,我们可以根据需要选择使用 BeanUtils.copyProperties() 方法或 PropertyUtils.copyProperties() 方法。如果需要进行类型转换,可以使用 BeanUtils.copyProperties() 方法;否则,可以使用 ...

    如何使用BeanUtils.copyProperties进行对象之间的属性赋值

    本文将深入探讨如何使用`BeanUtils.copyProperties`进行对象间的属性赋值,并通过示例代码进行详细解释。 `BeanUtils.copyProperties`是Spring框架中的一个静态方法,位于`org.springframework.beans.BeanUtils`类...

    commons-beanutils.jar.zip

    1. **属性拷贝**:BeanUtils.copyProperties()方法可以实现两个JavaBean对象之间的属性值拷贝,极大地减少了代码量。 2. **动态属性访问**:通过BeanUtils.getProperty()和BeanUtils.setProperty(),我们可以动态地...

    BeanUtilsBean对象复制使用(类型可以自动转化)

    在Java开发中,Apache Commons BeanUtils库是一个非常实用的工具包,它提供了许多方便的方法来操作JavaBeans。本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是...

    org.apache.commons.beanutils.jar

    `commons-license.txt`文件通常包含了Apache Commons BeanUtils的许可协议,它是Apache License 2.0,这是一个非常宽松的开源许可,允许用户自由地使用、修改和分发代码,只需保留原始作者的版权信息即可。...

    commons-beanutils.jar

    在本文中,我们将深入探讨`commons-beanutils.jar`这个库的使用、功能以及其在实际开发中的应用。 1. **BeanUtils简介** Apache Commons BeanUtils是基于JavaBean规范的工具库,它利用Java反射机制实现了对...

    BeanUtils.jar

    本文将深入探讨BeanUtils.jar的核心功能、使用场景以及其在实际开发中的重要性。 一、BeanUtils.jar简介 BeanUtils.jar主要包含了Apache Commons BeanUtils库,这是一个基于Java反射机制的工具库,它提供了对...

    自动装配Beanutils.zip

    // 使用BeanUtils.copyProperties()方法将请求参数映射到User对象 BeanUtils.copyProperties(user, request.getParameterMap()); } catch (IllegalAccessException | InvocationTargetException e) { // 处理...

    commons-beanutils-1.9.4.jar.zip

    5. **拷贝属性**:`BeanUtils.copyProperties()`方法可以实现对象间的属性深度拷贝,这对于创建对象副本或者在不同对象间传递数据十分便利。 6. **避免空指针异常**:BeanUtils库在处理null值时会进行保护,避免因...

    使用BeanUtils操作属性的一个小坑

    5. **使用BeanUtils.copyProperties()的自定义转换器**:如果属性类型不匹配,可以实现`org.apache.commons.beanutils.Converter`接口,然后通过`registerConverter()`方法注册,使BeanUtils在遇到这种类型转换时...

    commons-beanutils.jar带commons-logging.jar

    BeanUtils.copyProperties(sourceBean, targetBean); ``` 在“commons-beanutils.jar带commons-logging.jar”中,`commons-logging.jar`的引入是为了日志记录的灵活性。Apache Commons Logging提供了一个抽象层,...

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

    例如,在某些情况下,不恰当的使用`BeanUtils.copyProperties()`可能导致恶意代码执行。因此,使用时需谨慎,尤其是在处理用户输入时。 8. **替代品和扩展**: 随着Java生态的发展,其他库如Dozer、ModelMapper等...

    BeanUtils工具 .jar 包

    1. **属性复制**:BeanUtils.copyProperties()方法允许我们轻松地将一个Java Bean对象的属性值复制到另一个Bean对象。这对于在不同对象间传递数据或者创建对象的副本非常有用。例如,如果你有一个UserBean,你想创建...

    BeanUtils工具包

    - 为了提高性能,可以使用BeanUtils.copyProperties()的重载方法,指定只复制部分属性。 五、BeanUtils与其他工具的比较 虽然BeanUtils提供了方便的功能,但在大量属性复制或性能敏感的场景下,可以考虑使用Dozer...

    beanUtils , CopyProperty

    在标题“beanUtils, CopyProperty”中提到的`copyProperties`方法,是BeanUtils库中的核心功能之一,用于在两个JavaBean对象之间复制属性值。这个方法极大地简化了对象之间的数据拷贝,特别是当需要将一个对象的属性...

    datahandler.rar

    本文将探讨“datahandler”这一Java工具,它提供了一种类似BeanUtils.copyProperties的功能,但更加强大,能够处理不同类型的字段转换,为业务代码的解耦提供了有力支持。 首先,我们要理解Java中的BeanUtils....

    commons-beanutils-core-1.7.0.zip

    在这个例子中,我们创建了两个`MyBean`对象,并使用`BeanUtils.copyProperties()`方法将`source`对象的属性值复制到`target`对象,实现数据的快速转移。 总结 Apache Commons BeanUtils Core 1.7.0是一个强大的...

    beanutils的jar包.zip

    《深入理解BeanUtils:在Servlet应用中的高效使用》 在Java Web开发中,Apache Commons BeanUtils库是一个不可或缺的工具,它极大地简化了JavaBean对象之间的属性设置和获取操作。本篇文章将详细介绍BeanUtils的...

Global site tag (gtag.js) - Google Analytics