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

来源:互联网 发布:蜗牛卡充值话费软件 编辑:程序博客网 时间:2024/06/08 07:07

1.为什么要使用BeanUtils组件?

由于我们经常操作javabean,很频繁的get和set来实现属性的复制,apache提供了这个BeanUtils来实现直接对象的拷贝。

2.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;}}@Testpublic 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<String,Object> map=new HashMap<String,Object>();     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类型。


日期转换器工具类实现:

@Testpublic void test2() throws Exception{User newUser=new User();String birthString="1993-09-30";ConvertUtils.register(new Converter(){@Overridepublic Object convert(Class type, Object value) {if( type != Date.class) return null;if(value == 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类型的日期。


简化版:

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

@Testpublic 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



0 0
原创粉丝点击