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没有。
相关推荐
BeanUtils.copyProperties() 方法和 PropertyUtils.copyProperties() 方法的主要区别是,BeanUtils.copyProperties() 方法会进行类型转换,而 PropertyUtils.copyProperties() 方法不会。因此,BeanUtils....
在Java开发中,Apache Commons BeanUtils库是一个非常实用的工具包,它提供了许多方便的方法来操作JavaBeans。本文将深入探讨`BeanUtilsBean`对象复制的功能,特别关注它如何实现类型自动转换。`BeanUtilsBean`是...
#### 二、BeanUtils.copyProperties 与 PropertyUtils.copyProperties 的用法及区别 在 Java 开发中,经常会遇到需要复制一个对象的属性到另一个对象中的情况,尤其是在处理 DTO(Data Transfer Object)、VO(View...
4. **复制属性**: `BeanUtils.copyProperties()`方法可以将一个JavaBean的属性值复制到另一个JavaBean中,这在创建对象的副本或者进行对象间的数据迁移时非常有用。 5. **集合操作**: BeanUtils还支持与集合对象...
4. **可配置性**:BeanUtils提供了更高级的API,如`PropertyUtils`,允许对拷贝过程进行更多的控制,比如设置是否忽略空值、自定义转换规则等。 5. **性能考虑**:由于BeanUtils依赖于Java反射,因此在大量对象拷贝...
首先,BeanUtils库包含的主要类有`BeanUtils`和`PropertyUtils`。`BeanUtils`类提供了复制对象属性、创建Bean实例以及属性设置和获取等基本功能,而`PropertyUtils`类则扩展了更高级的属性操作,如集合和数组的处理...
4. 复制属性:`BeanUtils.copyProperties()`方法非常实用,它可以将一个对象的所有属性复制到另一个对象,这对于创建对象的副本或填充表单数据非常有用。 然而,需要注意的是,虽然BeanUtils提供了很多便利,但也...
2. **PropertyUtils**: 与BeanUtils类似,但提供了更多高级功能,如深度属性访问、集合操作等。 3. ** Desert**: 一个基于BeanUtils的更高级的组件,提供了类型转换、国际化支持等特性。 4. **Documentation**: 包含...
例如,`BeanUtils.copyProperties()`可以将一个对象的所有属性值复制到另一个对象,而`BeanUtils.getProperty()`和`BeanUtils.setProperty()`则用于获取和设置特定属性值。 2. **类型转换**:BeanUtils还提供了自动...
PropertyUtils是BeanUtils库中的一个子类,提供了更详细的属性操作接口。例如,可以单独设置或获取一个属性值,甚至处理复杂的属性路径(如嵌套属性)。 5. **异常处理**: BeanUtils在处理异常时通常会转换为一...
`BeanUtils.copyProperties()`方法允许我们将一个JavaBean的属性值复制到另一个JavaBean上,这对于对象克隆或者数据迁移非常有用。它可以处理复杂的数据结构,包括嵌套的JavaBean和集合。 4. **方法调用** `...
在Struts框架中,`ActionForm`的属性通常与Java Bean对应,`execute()`方法中通过`BeanUtils.copyProperties()`可以轻松地将表单字段的值复制到对应的Java Bean对象中,如下所示: ```java public ActionForward ...
使用 org.apache.commons.beanutils.PropertyUtils.copyProperties() 方法可以将一个 bean 中的属性拷贝到另一个 bean 中。这个方法的第一个参数是目标 bean,第二个参数是源 bean。这种方法的特点是: * 性能问题...
4. **Copy Properties**:BeanUtils.copyProperties()方法允许你将一个对象的所有属性值复制到另一个对象,这在对象克隆或数据模型转换中很常见。 5. **Nested Properties**:除了基本的属性操作外,BeanUtils还...
- `org.apache.commons.beanutils.PropertyUtils`: 这个类进一步扩展了BeanUtils的功能,提供了更细致的属性操作,如集合属性的处理。 - `org.apache.commons.beanutils.Converter`: 这是用于类型转换的接口,用户...
1. `BeanUtils`类:这是BeanUtils库的主入口,提供了大量静态方法,如`copyProperties()`、`getProperty()`和`setProperty()`等。`copyProperties()`方法可以将一个对象的所有属性值复制到另一个对象,实现了对象间...
BeanUtils的核心功能在于它的`copyProperties()`方法,它允许开发者将一个对象的属性值复制到另一个对象上。这对于数据绑定、对象拷贝或者在不同对象间传递信息非常有用。例如,如果你有一个Map对象,其中包含了键值...
BeanUtils还提供了`PropertyUtils.copyProperties()`方法,这是一个预防性的拷贝,它会检查目标bean是否有setter方法,避免因缺少setter而引发的异常。 8. 集合属性处理: BeanUtils可以处理集合属性,如List、Set...
例如,`BeanUtils.copyProperties()`方法可以用来复制一个Bean的所有属性到另一个Bean,这对于数据模型的克隆或者对象状态的传递非常有用。此外,`getProperty()`和`setProperty()`方法分别用于读取和设置Bean的属性...
BeanUtils包中的核心类是`org.apache.commons.beanutils.BeanUtils`,它提供了一系列静态方法,如`copyProperties()`,可以方便地复制一个Bean的所有属性到另一个Bean,或者通过字符串属性名来设置或获取Bean的属性...