`

BeanUtils.copyProperties VS PropertyUtils.copyProperties

阅读更多

 BeanUtils.copyProperties VS  PropertyUtils.copyProperties 

作为两个bean属性copy的工具类,他们被广泛使用,同时也很容易误用,给人造成困然;比如:昨天发现同事在使用BeanUtils.copyProperties copy有integer类型属性的bean时,没有考虑到会将null转换为0,而后面的业务依赖于null来判断,导致业务出错。下面总结一下主要的注意点:

 

  • 大范围两个工具类都是对两个bean之前存在name相同的属性进行处理,无论是源bean或者目标bean多出的属性均不处理。


  • 具体到BeanUtils是相同name并且类型之间支持转换属性可以处理,而PropertyUtils不支持类型转换必须是类型和name一样才处理。


  • 对null的处理:PropertyUtils支持为null的场景;BeanUtils对部分属性不支持null的情况,具体为下:

        1)、date类型不支持:异常 dateorg.apache.commons.beanutils.ConversionException: No value                  

          specified for 'Date'     

        2)、Ineger、Boolean、Long等不支持: 转为0;     

        3)、string:支持,保持null;

 

  • 关于类型转换的例子:     

       源bean有属性:   private Long    dateVal;

       目标bean有属性:private Date    dateVal;

       使用 PropertyUtils,会保错:Caused by: java.lang.IllegalArgumentException: argument type mismatch

       使用BeanUtils,则相当于new date(dateVal),网上传言java.util.Date不支持,就测试来说无论是 sql    

       util 都是ok

 

  • 对于自定义的对象类型属性  都是浅copy :

       比如都有属性:private Base  base;   Base有一个属性String Test;

       new.getBase().setTest("new");

       那么old.getBase().getTest()也为new

 

  • 性能:get,set《PropertyUtils《BeanUtils

  • BeanUtils的高级功能org.apache.commons.beanutils.Converter接口可以自定义类型之间的转化。PropertyUtils没有。 

 

0
1
分享到:
评论
1 楼 GGGGeek 2018-12-25  
Integer null转为0的情况是什么时候

相关推荐

    java Beanutils.copyProperties( )用法详解

    BeanUtils.copyProperties() 方法和 PropertyUtils.copyProperties() 方法的主要区别是,BeanUtils.copyProperties() 方法会进行类型转换,而 PropertyUtils.copyProperties() 方法不会。因此,BeanUtils....

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

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

    lomok.docx

    #### 二、BeanUtils.copyProperties 与 PropertyUtils.copyProperties 的用法及区别 在 Java 开发中,经常会遇到需要复制一个对象的属性到另一个对象中的情况,尤其是在处理 DTO(Data Transfer Object)、VO(View...

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

    4. **复制属性**: `BeanUtils.copyProperties()`方法可以将一个JavaBean的属性值复制到另一个JavaBean中,这在创建对象的副本或者进行对象间的数据迁移时非常有用。 5. **集合操作**: BeanUtils还支持与集合对象...

    beanUtils , CopyProperty

    4. **可配置性**:BeanUtils提供了更高级的API,如`PropertyUtils`,允许对拷贝过程进行更多的控制,比如设置是否忽略空值、自定义转换规则等。 5. **性能考虑**:由于BeanUtils依赖于Java反射,因此在大量对象拷贝...

    beanutils的jar包

    首先,BeanUtils库包含的主要类有`BeanUtils`和`PropertyUtils`。`BeanUtils`类提供了复制对象属性、创建Bean实例以及属性设置和获取等基本功能,而`PropertyUtils`类则扩展了更高级的属性操作,如集合和数组的处理...

    commons-beanutils-1.7.0.jar.zip

    4. 复制属性:`BeanUtils.copyProperties()`方法非常实用,它可以将一个对象的所有属性复制到另一个对象,这对于创建对象的副本或填充表单数据非常有用。 然而,需要注意的是,虽然BeanUtils提供了很多便利,但也...

    commons-beanutils-1.9.1-bin.zip

    2. **PropertyUtils**: 与BeanUtils类似,但提供了更多高级功能,如深度属性访问、集合操作等。 3. ** Desert**: 一个基于BeanUtils的更高级的组件,提供了类型转换、国际化支持等特性。 4. **Documentation**: 包含...

    commons-beanutils-1.8.0.rar

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

    commons-beanutils-1.9.3.jar

    `BeanUtils.copyProperties()`方法允许我们将一个JavaBean的属性值复制到另一个JavaBean上,这对于对象克隆或者数据迁移非常有用。它可以处理复杂的数据结构,包括嵌套的JavaBean和集合。 4. **方法调用** `...

    commons-beanutils

    PropertyUtils是BeanUtils库中的一个子类,提供了更详细的属性操作接口。例如,可以单独设置或获取一个属性值,甚至处理复杂的属性路径(如嵌套属性)。 5. **异常处理**: BeanUtils在处理异常时通常会转换为一...

    BeanUtils的应用

    在Struts框架中,`ActionForm`的属性通常与Java Bean对应,`execute()`方法中通过`BeanUtils.copyProperties()`可以轻松地将表单字段的值复制到对应的Java Bean对象中,如下所示: ```java public ActionForward ...

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

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

    commons-beanutils-1.8.0.zip

    4. **Copy Properties**:BeanUtils.copyProperties()方法允许你将一个对象的所有属性值复制到另一个对象,这在对象克隆或数据模型转换中很常见。 5. **Nested Properties**:除了基本的属性操作外,BeanUtils还...

    commons-beanutils-1.7.0-src.zip

    - `org.apache.commons.beanutils.PropertyUtils`: 这个类进一步扩展了BeanUtils的功能,提供了更细致的属性操作,如集合属性的处理。 - `org.apache.commons.beanutils.Converter`: 这是用于类型转换的接口,用户...

    beanUtils-1.3

    1. `BeanUtils`类:这是BeanUtils库的主入口,提供了大量静态方法,如`copyProperties()`、`getProperty()`和`setProperty()`等。`copyProperties()`方法可以将一个对象的所有属性值复制到另一个对象,实现了对象间...

    BeanUtils.rar

    BeanUtils的核心功能在于它的`copyProperties()`方法,它允许开发者将一个对象的属性值复制到另一个对象上。这对于数据绑定、对象拷贝或者在不同对象间传递信息非常有用。例如,如果你有一个Map对象,其中包含了键值...

    apache BeanUtils

    BeanUtils还提供了`PropertyUtils.copyProperties()`方法,这是一个预防性的拷贝,它会检查目标bean是否有setter方法,避免因缺少setter而引发的异常。 8. 集合属性处理: BeanUtils可以处理集合属性,如List、Set...

    beanutils 1.8 jar包+源码_阿锦—小白

    例如,`BeanUtils.copyProperties()`方法可以用来复制一个Bean的所有属性到另一个Bean,这对于数据模型的克隆或者对象状态的传递非常有用。此外,`getProperty()`和`setProperty()`方法分别用于读取和设置Bean的属性...

    beanutils 有两个 包 一个日志包一个bean包

    BeanUtils包中的核心类是`org.apache.commons.beanutils.BeanUtils`,它提供了一系列静态方法,如`copyProperties()`,可以方便地复制一个Bean的所有属性到另一个Bean,或者通过字符串属性名来设置或获取Bean的属性...

Global site tag (gtag.js) - Google Analytics