Spring 作为工具类之 BeanUtils.copyProperties

Spring 作为一个轻量级的开发框架就不用我做过多的介绍了吧.如果再仔细去研究一下 Spring ,可以发现Spring的代码中作为支持Spring运行的很多工具类也是很优秀的,不要再添加额外的工具类甚至就可以完成一些优秀的功能可谓是方便至极,这里介绍一下 BeanUtils.copyProperties(Object source,Object target) 这个方法,并且连带它的一些应用场景.

介绍

定义一个 User 对象:

@Data
public class User{
	private String name;
	private String age;
	private String gender;
	private String address;
	public User(String name,String age){
		this.name = name;
		this.age = age;
	}
}

首先,这个方法可以将一个对象的属性拷贝到另外一个对象上.在一些场景下,对象有上百个属性需要拷贝时,用这个方法就很方便了.这里不去对浅拷贝,深拷贝去做介绍(况且我也不太明白那些是什么意思)

User1 user1 = new User1("zhangsan",23);
// User2具有和User1相同的属性,但是为不同的类
User2 user2 = new User2();
BeanUtils.copyProperties(user1,user2);
System.out.println(user2);
//{"name":"zhangsan","age":23}

下面介绍一下 BeanUtils.copyProperites(source,target) 这个方法的一些特性:

  • 被拷贝的两个对象 不要求 类相同
  • 被拷贝的属性要求有 gettersetter 方法,并且类型保持一致,否则 Spring 会认为属性不同,不会Copy
关于 BeanUtils.copyProperties 的一些高级特性

除了上面的使用方式以外, BeanUtils.copyProperties 还有一些其他使用方法,下面对这些方法做一些简单的介绍:

public static void copyProperties(Object source, Object target, Class<?> editable)
// 通过 editable 属性可以指定要拷贝的属性,如下:
public interface IUser1{
	String getName();
	String getAge();
}
// 通过指定 IUser1 可以指定只拷贝 name 和 age 这两个属性
BeanUtils.copyProperties(user1,user2,IUser1.class);
public static void copyProperties(Object source, Object target, String... ignoreProperties)
// 通过 ignoreProperties 可变参数用于指定不拷贝哪些属性
// 通过指定忽略 name 和 address 两个属性可以避免这两个属性被拷贝
BeanUtils.copyProperties(user1,user2,"name","address");

注意事项

除了 Spring 本身实现了一个 BeanUtils 之外,Apache 也有一个通用的工具类 BeanUtils,在使用的时候避免导包错误:

import org.springframework.beans.BeanUtils;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值