温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java中的BeanUtils.copyProperties怎么使用

发布时间:2023-04-26 11:31:24 来源:亿速云 阅读:108 作者:iii 栏目:开发技术

这篇文章主要讲解了“Java中的BeanUtils.copyProperties怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中的BeanUtils.copyProperties怎么使用”吧!

(1)实际应用

BeanUtils.copyProperties(赋值目标对象,模板源对象);
我们都知道当有两个对象AB,属性名称一样的情况下,如果需要把A的全部属性给B,传统写法是:

B.setXX(A.getXX());

如果只有几个特别的参数需要赋值过去这样写没问题,如果AB有100个参数需要粘过去,那么代码就太冗余太长了,BeanUtils.copyProperties就是为了解决这个问题的,现在假设有AB两个对象:

static class DemoA {
    private String name;
    private int sex;
    private int phone;
}

static class DemoB {
    private String name;
    private int sex;
    private int phone;
}

测试main方法:

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA();
    DemoB b = new DemoB();
    a.setName("jojo");
    a.setPhone(12306);
    a.setSex(1);

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.getName()+b.getPhone()+b.getSex());
}

Java中的BeanUtils.copyProperties怎么使用

(2) 使用要注意的小坑

1:如果AB都是或者有一个是static的,赋值都会失败

Java中的BeanUtils.copyProperties怎么使用
 

Java中的BeanUtils.copyProperties怎么使用

Java中的BeanUtils.copyProperties怎么使用

2:注意引入的包

import org.apache.commons.beanutils.BeanUtils;

Java中的BeanUtils.copyProperties怎么使用

之前手快引错了,死活拿不出来,浪费了一点时间Debug
如果用的是springframework的这个方法,记住复制对象和源对象位置是刚好相反。千万注意自己引入的哪个BeanUtil,写对应参数位置。

3:不提供get,set方法

Java中的BeanUtils.copyProperties怎么使用

public static void main(String[] args) throws Exception {
    DemoA a = new DemoA("jojo",1,12306);
    DemoB b = new DemoB();

    BeanUtils.copyProperties(b,a);
    System.out.println("b: "+b.toString());
}

赋值失败

Java中的BeanUtils.copyProperties怎么使用

为什么呢?因为,它底层是通过反射获取对象里面的每个属性,再通过get,set获取和设值,不提供get,set,就当然没办法复制了。

4:加@Data注解

我们知道lombok.Data包中的@Data注解可以帮助我们省去get,set方法,那么不写getset,加@Data行不行?

Java中的BeanUtils.copyProperties怎么使用

Java中的BeanUtils.copyProperties怎么使用

结果是可以的,我个人理解的注解的本质就是切面编程,把一些固定的逻辑通过增强型代理类配置进去,外部在使用的时候也就是使用增强型代理类的方法,而@Data类似一些省事的语法糖,帮助我们“写”了那堆get,set方法供别人调用。

5:参数名不一致的,不能复制成功

注意,参数名必须严格一致,例如:A.name 对应 B.name,如果是B.nAme或者B.names,那就肯定不行了!
如果刚好两个实体类参数名不一致,怎么办呢?那只能用老的写法B.setNames(A.getName());

(3)以springframework.beans的BeanUtils.copyProperties为例,快速看几眼源码,不难理解

第一个参数是源,第二个参数是目标对象

Java中的BeanUtils.copyProperties怎么使用

Java中的BeanUtils.copyProperties怎么使用

红色方法就是反射创建对象方法

Java中的BeanUtils.copyProperties怎么使用

感谢各位的阅读,以上就是“Java中的BeanUtils.copyProperties怎么使用”的内容了,经过本文的学习后,相信大家对Java中的BeanUtils.copyProperties怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI