java 克隆对象工具类_Apache BeanUtils BeanUtils工具类操作Java Bean

本文详细介绍了Apache Commons BeanUtils库,包括其功能如对象克隆、属性复制、Map映射到Bean、Bean转Map以及访问属性的方法。通过实例演示了如何使用BeanUtils进行JavaBean的高效操作。
摘要由CSDN通过智能技术生成

BeanUtils最早可能要从JavaBean说起,这个名称来源于一个针对组件架构的Java API,按照JavaBeans设计原则来编写Java类会让开发者更容易理解的类所能提供的功能,就好像允许那些能够意识到JavaBeans的工具来使用Java的内省能力来知道类所提供的属性和操作。并用一种具有视觉吸引力的方式展现在开发工具上。

开发环境说明:

环境: Windows + Eclipse + JDK1.5+

版本:commons-beanutils-1.9.2-bin.zip

其他包的依赖:

the commons-beanutils package requires that the following additional packages be available in the application's class path at runtime:

Logging Package (Apache Commons), version 1.0 or later

Collections Package (Apache Commons), version 1.0 or later

JavaBeans规范的定义:

1、类的标志限定符必须是public,并且提供一个public的无参构造器。这将允许工具和应用来动态创建bean的新的实例,而不用提前知道哪一个Java类名将被使用。

2、既然拥有一个无参构造器,那么配置bean的行为必须和初始化分离,这通常是通过定义一系列的属性。通过它们可以修改bean的行为或数据。

3、属性的命名通常是用驼峰命名法。通常,每个属性会分别有一个public的getter和setter方法来取得或是设置属性值。

JavaBeans规范定义了命名惯例。

操作Java Bean案例代码:package com.what21.beanutils.bean;

import java.util.Date;

import java.util.Map;

public class User {

// ID

private String id;

// 名称

private String name;

// 年龄

private int age;

// 创建时间

private Date createTime;

// 所属组

private Group[] groups;

// 所属组

private Map groupMap;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public Date getCreateTime() {

return createTime;

}

public void setCreateTime(Date createTime) {

this.createTime = createTime;

}

public Group[] getGroups() {

return groups;

}

public void setGroups(Group[] groups) {

this.groups = groups;

}

public Map getGroupMap() {

return groupMap;

}

public void setGroupMap(Map groupMap) {

this.groupMap = groupMap;

}

}package com.what21.beanutils.bu01;

import java.lang.reflect.InvocationTargetException;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;

import com.what21.beanutils.bean.User;

public class BeanUtilsMain {

/**

* 克隆Java Bean

*/

public static void cloneBean(){

// 1、创建对象

User user = new User();

user.setId("zhangsan");

user.setName("张三");

user.setAge(22);

user.setCreateTime(new Date());

//2、克隆一个Java对象

User user2 = null;

try {

user2 = (User)BeanUtils.cloneBean(user);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

System.out.println("id = " + user2.getId());

System.out.println("name = " + user2.getName());

System.out.println("age = " + user2.getAge());

System.out.println("createTime = " + user2.getCreateTime());

// user2为新克隆构建的一个对象,输出false,

System.out.println("user==user2 " + (user==user2));

// user2为新克隆构建的一个对象,输出false,

System.out.println("user==user2 " + (user.equals(user2)));

}

/**

* 复制Bean属性

*/

public static void copyProperties(){

// 1、创建对象

User user = new User();

user.setId("zhangsan");

user.setName("张三");

user.setAge(22);

user.setCreateTime(new Date());

// 2、创建对象

User user2 = new User();

// 3、复制JavaBean所有属性

try {

BeanUtils.copyProperties(user2, user);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

// 4、赋值JavaBean属性

try {

BeanUtils.copyProperty(user2, "name", "张三3333");

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

System.out.println("id = " + user2.getId());

System.out.println("name = " + user2.getName());

System.out.println("age = " + user2.getAge());

System.out.println("createTime = " + user2.getCreateTime());

}

/**

* Map填充Bean属性

*/

public static void mapPopulate(){

// 1、创建对象

User user = new User();

// 2、填充的Map

Map populateMap = new HashMap();

populateMap.put("id", "lisi");

populateMap.put("name", "李四");

populateMap.put("age", 32);

populateMap.put("createTime", new Date());

try {

BeanUtils.populate(user, populateMap);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

System.out.println("id = " + user.getId());

System.out.println("name = " + user.getName());

System.out.println("age = " + user.getAge());

System.out.println("createTime = " + user.getCreateTime());

}

/**

* Bean转换成Map

*/

public static void beanToMap(){

// 1、创建对象

User user = new User();

user.setId("zhangsan");

user.setName("张三");

user.setAge(22);

user.setCreateTime(new Date());

Map beanMap = null;

try {

beanMap = BeanUtils.describe(user);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

System.out.println("id = " + beanMap.get("id"));

System.out.println("name = " + beanMap.get("name"));

System.out.println("age = " + beanMap.get("age"));

System.out.println("createTime = " + beanMap.get("createTime"));

System.out.println("user class = " + beanMap.get("class"));

}

/**

* 访问Bean的属性

*/

public static void beanProperties(){

// 1、创建对象

User user = new User();

user.setId("zhangsan");

user.setName("张三");

user.setAge(22);

user.setCreateTime(new Date());

try {

String id = (String)BeanUtils.getSimpleProperty(user, "id");

System.out.println("id = " + id);

String name = (String)BeanUtils.getProperty(user, "name");

System.out.println("name = " + name);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) {

// 克隆Java Bean

cloneBean();

System.out.println("-------------------------------------------");

// 复制Bean属性

copyProperties();

System.out.println("-------------------------------------------");

// Map填充Bean属性

mapPopulate();

System.out.println("-------------------------------------------");

// Java Bean 转换成Map

beanToMap();

System.out.println("-------------------------------------------");

// 访问Java Bean的属性

beanProperties();

}

}

执行输出:id = zhangsan

name = 张三

age = 22

createTime = Mon Sep 12 12:42:14 CST 2016

user==user2 false

user==user2 false

-------------------------------------------

id = zhangsan

name = 张三3333

age = 22

createTime = Mon Sep 12 12:42:15 CST 2016

-------------------------------------------

id = lisi

name = 李四

age = 32

createTime = Mon Sep 12 12:42:15 CST 2016

-------------------------------------------

id = zhangsan

name = 张三

age = 22

createTime = Mon Sep 12 12:42:15 CST 2016

user class = class com.what21.beanutils.bean.User

-------------------------------------------

id = zhangsan

name = 张三

BeanUtils类总结:

BeanUtils类:提供了克隆Bean(cloneBean方法)、复制Bean属性(copyProperties方法和copyProperty方法)、Map转换Bean属性(populate方法)、Bean属性转换Map(describe方法)和访问Bean属性(getSimpleProperty方法和getProperty)。

getSimpleProperty方法和getProperty方法:通过名字访问bean的属性,通过提供属性名返回属性的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值