_____1.1.5|java使用第三方工具BeanUtils实现对象的复制

1.为什么要使用BeanUtils组件? 由于我们经常操作javabean,很频繁的get和set来实现属性的复制,apache提供了这个BeanUtils来实现直接对象的拷贝。
2.BeanUtils的基本实现 导包:
_____1.1.5|java使用第三方工具BeanUtils实现对象的复制
文章图片

下面两个包是必须要导入的,第一个是源码包。

实现对象的复制:

public class User { private Integer id; private String username; private String gender; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }@Test public void test1() throws Exception{ User user=new User(); BeanUtils.copyProperty(user, "id", "1"); BeanUtils.copyProperty(user, "gender", "男"); System.out.println("单个属性值传入的方式:"+user.getId()+", "+user.getGender()); User newUser=new User(); BeanUtils.copyProperties(newUser, user); System.out.println("整个对象拷贝:"+newUser.getId()+", "+newUser.getGender()); Map map=new HashMap(); map.put("username", "Jerry"); BeanUtils.populate(newUser, map); System.out.println("拷贝map对象:"+newUser.getUsername()); }

结果:
单个属性值传入的方式:1, 男
整个对象拷贝:1, 男
拷贝map对象:Jerry


3.日期转换器工具 User类:

public class User { private Integer id; private String username; private String gender; private Date birth; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } }

增加了生日属性,是日期类型的。
如果我们直接使用BeanUtils.copyProperty(user,"birth",birthString); 那么就会报以下警告,转换也不成功。BeanUtils不会把String类型自动转成Date类型。
_____1.1.5|java使用第三方工具BeanUtils实现对象的复制
文章图片


日期转换器工具类实现:


@Test public void test2() throws Exception{ User newUser=new User(); String birthString="1993-09-30"; ConvertUtils.register(new Converter(){ @Override public Object convert(Class type, Object value) { if( type != Date.class) return null; if(value =https://www.it610.com/article/= null ||"".equals(value.toString().trim())) return null; try { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); return sdf.parse(value.toString()); } catch (ParseException e) { throw new RuntimeException(e); } } },Date.class); BeanUtils.copyProperty(newUser, "birth", birthString); System.out.println(newUser.getBirth()); }

结果:
Thu Sep 30 00:00:00 CST 1993

通过ConvertUtils的register方法内自定义一个转换器来实现String类型的日期转为Date类型的日期。


简化版:
使用组件提供的日期转换工具类:

@Test public void test3() throws Exception{ User newUser=new User(); String birthString="2016-10-17"; ConvertUtils.register(new DateLocaleConverter(), Date.class); BeanUtils.copyProperty(newUser, "birth", birthString); System.out.println(newUser.getBirth()); }

结果:
Mon Oct 17 00:00:00 CST 2016



【_____1.1.5|java使用第三方工具BeanUtils实现对象的复制】

    推荐阅读