有的时候我们需要将一个bean的属性赋值到另一个bean的属性中,比如用户提交过来的表单bean需要将该bean中的属性值赋值到对应的数据库bean,我们通常会以这样的方式做:

 User user = new User("1", "Jon_China", "123456", "1992-11-17", "127.0.0.1");
2 TargetUser target = new TargetUser();
target.setId(user.getId());
target.setUserName(user.getUserName());
target.setPassword(user.getPassword());

当bean的属性过多时是不是感觉“嘿打脑壳”。不要紧,Apache提供bean的copy工具BeanUtil.

当然是用也是比较简单的,楼主一步一步说明:

1、先搞两个bean

package com.jon.china.beancopy;
//假设是用户提交过来的bean
public class User {
private String Id;
private String userName;
private String password;
private String birthday;
private String loginIp;
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
}
public User(String id, String userName, String password, String birthday,
String loginIp) {
Id = id;
this.userName = userName;
this.password = password;
this.birthday = birthday;
this.loginIp = loginIp;
} }

定义目标bean,目的将User属性值复制到TargetUser中,需要注意的是属性birthday类型的变化。

package com.jon.china.beancopy;

import java.util.Date;

public class TargetUser {
private String Id;
private String userName;
private String password;
private Date birthday;
private String loginIp;
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getLoginIp() {
return loginIp;
}
public void setLoginIp(String loginIp) {
this.loginIp = loginIp;
} }

2、由于birthday需要将String转换为Date类型,这里定义个转换器,实现Converter接口:

package com.jon.china.beancopy;

import java.text.ParseException;
import java.text.SimpleDateFormat; import org.apache.commons.beanutils.Converter; public class BeanConvert implements Converter {
/**
* 日期类型转换器
*/
@Override
public Object convert(Class type, Object value) {
if(value==null){
return null;
}
String v = (String) value;
if("".equals(v.trim())){
return null;
}
SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd");
try {
return sf.parse(v);
} catch (ParseException e) {
throw new RuntimeException(e);
}
} }

3、初始化User,注册转换器,开始转换:

package com.jon.china.beancopy;

import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils; public class Test { public static void main(String[] args) {
User user = new User("1", "Jon_China", "123456", "1992-11-17", "127.0.0.1");
TargetUser target = new TargetUser();
//注册日期转换器
ConvertUtils.register(new BeanConvert(), Date.class);
try {
BeanUtils.copyProperties(target, user);//开始复制bean
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println(target.getLoginIp());
} }

4、成功,结束。

源码地址:https://github.com/LJunChina/BeanCopy

Bean复制的更多相关文章

  1. Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)

    转自:http://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html 比较的是四种复制的方式,分别为Apache的BeanUtils和Prope ...

  2. 【commons】Bean工具类——commons-beanutils之BeanUtils

    一.起步 引入依赖: <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils --> < ...

  3. 阶段3 2.Spring_03.Spring的 IOC 和 DI_6 spring中bean的细节之三种创建Bean对象的方式

    目前这里能调用是因为,在service的实现类里面,new了一个dao的对象 正常情况下 这里不应该是new一个对象,应该等于null或为空 设置为空侯再运行就会报错 出错的原因是这里为null 需要 ...

  4. Struts框架2ActionError类 内部资料 请勿转载 谢谢合作

    ActionError类从不独立进行错误处理,它们总是被存储在ActionErrors对象中.ActionErrors对象保存ActionError类的集合以及它们特定的属性值,我们可以使用自己定义的 ...

  5. 3.8 spring - AbstractBeanDefinition 介绍

    之前,我们已尽完成了xml 文档到 GenericBeanDefinition的转换, 也就是说,到这里,所有的配置都可以在GenericBeanDefinition 的实例中找到对应的配置. Gen ...

  6. JAVA CAS单点登录(SSO) 教程

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...

  7. CAS单点登录(SSO)完整教程

    转:http://blog.csdn.net/frinder/article/details/7969925 CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的 ...

  8. cas sso入门(转)

    转:http://blog.csdn.net/frinder/article/details/7969925 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登 ...

  9. JAVA CAS单点登录(SSO)

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...

随机推荐

  1. KNN算法--物以类聚,人以群分

    KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>= ...

  2. box-sizing

    Over the generations, people realized that math is not fun, so a new CSS property called box-sizing ...

  3. dp中表示无限取的写法

    dp[i][j]=dp[i-a[i][j]+dp[i-a[i]][j-1]; 其中前一项j不变表示j这一项无限取

  4. 随机矩阵(stochastic matrix)

          最近一个月来一直在看Google排序的核心算法---PageRank排序算法[1][2],在多篇论文中涉及到图论.马尔可夫链的相关性质说明与应用[3][4][5],而最为关键,一直让我迷惑 ...

  5. spring mvc handler的三种方式

    springmvc.xml 三种方式不能针对一个controller同时使用 <?xml version="1.0" encoding="UTF-8"?& ...

  6. [JQuery]JQuery选择器引擎Sizzle

    写代码过程中,发现使用JQuery选择器时,$('div.tooltip')和$('.tooltip')的结果不一样,怀疑和选择器的代码逻辑有关(事后证明是代码的低级错误,但是从查找原因的过程中,学到 ...

  7. 如何一步一步用DDD设计一个电商网站(十三)—— 领域事件扩展

    阅读目录 前言 回顾 本地的一致性 领域事件发布出现异常 订阅者处理出现异常 结语 一.前言 上篇中我们初步运用了领域事件,其中还有一些问题我们没有解决,所以实现是不健壮的,下面先来回顾一下. 二.回 ...

  8. 蓝桥网试题 java 入门训练 圆的面积

    ---------------------------------------------------------------------------------------------------- ...

  9. 编程练习------C/C++分别实现字符串与整数的转换

    C/C++分别实现字符串与整数的转换 前提:不使用 itoa 和 atoi. 方法一.C和C++通用的一种转换手段是: 1.整数转化为字符串:采用加'0',再逆序的办法,整数加'0'就会隐性转化成ch ...

  10. C++ 构造函数和析构函数的调用顺序、虚析构函数的作用

    构造函数和析构函数的调用顺序 构造函数的调用顺序: 当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达最底层的目标派生类的构造函数为止. 析构函数的调用书序: ...