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的属性,通过提供属性名返回属性的值。