BeanUtils.copyProperties的拷贝属性的使用案例

文章展示了如何在Java中利用Spring框架的BeanUtils工具类,将Bean1的属性值复制到结构相似的Bean2中。在示例中,尽管Bean1和Bean2有相同的字段(age和name),但Bean2有一个额外的localDateTime字段,这个字段在复制过程中未被填充,说明BeanUtils.copyProperties方法只拷贝对应字段名的属性。
摘要由CSDN通过智能技术生成

注意是org.springframework.beans.BeanUtils包下的BeanUtils

1、首先定义两个bean分别取名为Bean1和Bean2,如下:

Bean1下的内容:

import lombok.Data;

@Data
public class Bean1 {
    private Integer age;
    private String name;
    private Integer score;
}

Bean2下的内容:

import lombok.Data;
import java.time.LocalDateTime;

@Data
public class Bean2 {
    private Integer age;
    private String name;
    private LocalDateTime localDateTime;
}

2、定义一个测试类MyTest,代码如下:

import org.springframework.beans.BeanUtils;

import java.time.LocalDateTime;

public class MyTest {
    public static void main(String[] args) {
        Bean1 bean1 = new Bean1();
        bean1.setAge(1);
        bean1.setName("jjw");
        bean1.setScore(60);
        Bean2 bean2 = new Bean2();
        BeanUtils.copyProperties(bean1,bean2);  
        bean2.setLocalDateTime(LocalDateTime.now());
        System.out.println(bean2);
    }
}

输出结果:

Bean2(age=1, name=jjw, localDateTime=2023-06-25T15:56:24.704)

结论:

将bean1的属性的值拷贝到bean2与之对应的字段上,如果字段名字不相同则不拷贝。

BeanUtils.copyProperties方法是Apache Commons BeanUtils库中的一个工具方法,用于将一个Java对象的属性拷贝到另一个Java对象中。它可以实现对象之间的属性值复制,无需手动逐个设置属性使用BeanUtils.copyProperties方法进行属性拷贝时,需要注意以下几点: 1. 属性名称和类型必须在源对象和目标对象中存在且匹配。 2. 属性值的拷贝是基于属性名称进行匹配的,而不是基于属性的位置。 3. 如果源对象和目标对象中存在相同名称但类型不匹配的属性,会抛出ConversionException异常。 4. 如果源对象中的属性值为null,则目标对象对应的属性值也会被设置为null。 5. 如果源对象和目标对象中存在嵌套对象,也会进行递归拷贝。 下面是一个示例代码,演示了如何使用BeanUtils.copyProperties方法进行属性拷贝: ```java import org.apache.commons.beanutils.BeanUtils; public class Main { public static void main(String[] args) { SourceObject source = new SourceObject(); source.setName("John"); source.setAge(25); TargetObject target = new TargetObject(); try { BeanUtils.copyProperties(target, source); System.out.println(target.getName()); // 输出:John System.out.println(target.getAge()); // 输出:25 } catch (Exception e) { e.printStackTrace(); } } } class SourceObject { private String name; private int age; // 省略getter和setter方法 } class TargetObject { private String name; private int age; // 省略getter和setter方法 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值