Java关于BeabUtils.copyproperties的用法
作者:程序员阿伟
这篇文章主要介绍了Java关于BeabUtils.copyproperties的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
关于BeabUtils.copyproperties用法
BeanUtils它提供了对java反射和自省API的包装。
它里面还有很多工具类,这里我们介绍一下copyProperties。
使用BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值,减少了代码工作量。
用法
BeanUtils.copyProperties("被赋值的对象", "被复制的对象");
注意
例子:BeanUtils.copyProperties(a, b)
- 1、a和b可以是不同的类;
- 2、b中的存在的属性,a中一定要有,但是a中可以有多余的属性。
- 3、a中与b中相同的属性都会被替换,不管a中的属性是否有值。
- 4、a、 b中的属性要名字相同,才能被赋值,不然的话需要手动赋值。
- 5、Spring的BeanUtils的CopyProperties方法需要对应的属性有getter和setter方法。
- 6、spring和apache的copy属性的方法源和目的参数的位置正好相反,所以导包和调用的时候都要注意一下。
Spring中的BeanUtils.copyProperties方法是深拷贝还是浅拷贝
理解什么是浅拷贝 , 什么是深拷贝 ?
- 拷贝 : 顾名思义 ,在 Java当中就是 将一个类 的 属性 通过 get 和 set 方法来 赋值 给到 另一个类当中的属性 .
- 浅拷贝 : 如果是引用类型 , 那么目标对象拷贝的只是源对象的地址 (无论目标对象还是源对象的改变 , 它们都会一起发生改变)[引用的一个内存地址]
- 深拷贝 : 即将源对象的属性值 全部复制到 目标对象相应属性 (复制完之后,它们之间是隔开的 , 没有任何关系 , 无论操作源对象 还是目标对象 都是对另一个没有影响)[将子对象的属性也拷贝过去]
BeanUtils.copyProperties方法是深拷贝还是浅拷贝?
- 答 : 浅拷贝 .
- 测试代码 :
public class User { private int id; private String username;// 用户姓名 //get set方法此处省略 }
public class Person { private Object user; //get set方法此处省略 }
@Test public void CopyTest(){ //创建对象 User user=new User(); user.setId(1); user.setUsername("对象1"); Person oldPerson = new Person(); oldPerson.setUser(user); Person newPerson = new Person(); BeanUtils.copyProperties(oldPerson,newPerson); System.out.println(newPerson.getUser().toString()); //输出地址 System.out.println("oldPerson = " + oldPerson.getUser()); System.out.println("newPerson = " + newPerson.getUser()); }
打印结果 :
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。