首先构造2个Bean的类:
Person类
package com.djy.bean;
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private String sex;
private int age;
private Address address;
private List goods;
private Map contact;
public Person() {
}
public Person(String name) {
this.name = name;
}
public Person(String name,String sex) {
this.name = name;
this.sex = sex;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return this.sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
public List getGoods() {
return this.goods;
}
public void setGoods(List goods) {
this.goods = goods;
}
public Map getContact() {
return this.contact;
}
public void setContact(Map contact) {
this.contact = contact;
}
public void sayHello() {
System.out.println("Hello World!");
}
public void f(String str) {
System.out.println("Person.f()..." + str);
}
public String toString() {
return "Person.toString()...";
}
}
Address类:
package com.djy.bean;
public class Address {
private String province;
private String city;
private String street;
private String zipcode;
public String getProvince() {
return this.province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return this.city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return this.street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return this.zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
然后是一个测试类:
package com.djy.bean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConstructorUtils;
import org.apache.commons.beanutils.MethodUtils;
import org.apache.commons.beanutils.PropertyUtils;
public class BeanUtilsTest {
public static void main(String[] args) throws Exception {
Address address = new Address();
address.setProvince("GuangDong");
address.setCity("GuangZhou");
address.setStreet("Tian He");
address.setZipcode("510000");
List goods = new ArrayList();
goods.add("sporting");
goods.add("singing");
goods.add("dancing");
Map contact = new HashMap();
contact.put("student", "Ken");
contact.put("teacher", "Mafai");
Person person = new Person();
person.setName("Mike");
person.setSex("male");
person.setAge(25);
person.setAddress(address);
person.setGoods(goods);
person.setContact(contact);
// BeanUtilsTest.cloneBean(person);
// BeanUtilsTest.copyProperties(person);
// BeanUtilsTest.propertyUtilsCopyProperties(person);
// BeanUtilsTest.copyProperty(person);
// BeanUtilsTest.describe(person);
// BeanUtilsTest.propertyUtilsDescribe(person);
// BeanUtilsTest.populate(person);
// BeanUtilsTest.getArrayProperty(person);
// BeanUtilsTest.getIndexedProperty(person);
// BeanUtilsTest.getMappedProperty(person);
// BeanUtilsTest.getNestedProperty(person);
// 得到一个bean中指定属性的值,相当于getter
// System.out.println(BeanUtils.getProperty(person,"name"));
// 修改一个bean中指定属性的值,相当于setter
// BeanUtils.setProperty(person,"name","Tom");
// System.out.println(BeanUtils.getProperty(person,"name"));
// System.out.println("--------------------------------------");
//
// BeanUtilsTest.invokeMethod();
// System.out.println("--------------------------------------");
// BeanUtilsTest.getAccessibleMethod();
// System.out.println("--------------------------------------");
// BeanUtilsTest.invokeConstructor();
// System.out.println("--------------------------------------");
// BeanUtilsTest.getAccessibleConstructor();
}
// BeanUtils.cloneBean()--克隆目标bean
public static void cloneBean(Person person) throws Exception {
Person p = (Person) BeanUtils.cloneBean(person);
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
p.getAddress().setCity("FoShan");
System.out.println("---------------------------");
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
System.out.println(p.getAddress() == person.getAddress());
}
// BeanUtils.copyProperties()--拷贝目标bean中属性的值,能进行类型转换
public static void copyProperties(Person person) throws Exception {
Person p = new Person();
BeanUtils.copyProperties(p, person);
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
p.getAddress().setCity("FoShan");
System.out.println("---------------------------");
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
System.out.println(p.getAddress() == person.getAddress());
}
// PropertyUtils.copyProperties()--拷贝目标bean中属性的值,不能进行类型转换
public static void propertyUtilsCopyProperties(Person person)
throws Exception {
Person p = new Person();
PropertyUtils.copyProperties(p, person);
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
p.getAddress().setCity("FoShan");
System.out.println("---------------------------");
System.out.println(p.getAddress().getCity());
System.out.println(person.getAddress().getCity());
System.out.println(p.getAddress() == person.getAddress());
}
// BeanUtils.copyProperty()--拷贝一个值给目标Bean的一个属性,能进行类型转换
public static void copyProperty(Person person) throws Exception {
Person p = new Person();
BeanUtils.copyProperty(p, "age", "12");
System.out.println(p.getAge());
}
// BeanUtils.describe()--得到一个bean的所有描述,返回的是一个map
public static void describe(Person person) throws Exception {
Map map = BeanUtils.describe(person);
Set set = map.keySet();
for (Iterator it = set.iterator(); it.hasNext();) {
Object o = it.next();
System.out.println(o + ": " + map.get(o));
}
System.out.println("--------------------------------------");
// Collection c = map.values();
// for(Object o : c) {
// System.out.println(o);
// }
}
// PropertyUtils.describe()--得到一个bean的所有描述,返回的是一个map
public static void propertyUtilsDescribe(Person person) throws Exception {
Map map = PropertyUtils.describe(person);
Set set = map.keySet();
for (Iterator it = set.iterator(); it.hasNext();) {
Object o = it.next();
System.out.println(o + ": " + map.get(o));
}
System.out.println("--------------------------------------");
// Collection c = map.values();
// for(Object o : c) {
// System.out.println(o);
// }
// System.out.println("----------------------------");
}
// BeanUtils.populate()--使用一个map为bean赋值
public static void populate(Person person) throws Exception {
Map map = PropertyUtils.describe(person);
Person p = new Person();
BeanUtils.populate(p, map);
System.out.println(p.getName());
System.out.println(p.getSex());
System.out.println(p.getAge());
System.out.println(p.getAddress().getProvince());
System.out.println(p.getGoods().get(0));
System.out.println(p.getGoods().get(1));
System.out.println(p.getGoods().get(2));
System.out.println(p.getContact().get("student"));
System.out.println(p.getContact().get("teacher"));
System.out.println("--------------------------------------");
}
// BeanUtils.getArrayProperty()--将目标bean的一个属性的值转换成一个字符串数组
public static void getArrayProperty(Person person) throws Exception {
String[] array = BeanUtils.getArrayProperty(person, "goods");
for (String str : array) {
System.out.println(str);
}
}
// BeanUtils.getIndexedProperty()--可以检索目标bean中数组或集合类型的属性指定索引的值
public static void getIndexedProperty(Person person) throws Exception {
System.out.println(BeanUtils.getIndexedProperty(person, "goods[0]"));
System.out.println(BeanUtils.getIndexedProperty(person, "goods", 1));
}
// BeanUtils.getMappedProperty()--可以检索目标bean中具有map类型的属性中对应键的值
public static void getMappedProperty(Person person) throws Exception {
System.out.println(BeanUtils.getMappedProperty(person,
"contact(student)"));
System.out.println(BeanUtils.getMappedProperty(person, "contact",
"teacher"));
}
// BeanUtils.getNestedProperty()--得到目标bean中嵌套属性的值
public static void getNestedProperty(Person person) throws Exception {
System.out.println(BeanUtils.getNestedProperty(person,
"address.province"));
}
// MethodUtils.invokeMethod()--动态调用方法
public static void invokeMethod() throws Exception {
// MethodUtils.invokeMethod(Object arg1,String arg2,Object[] arg3)
// arg1 一个bean的名称
// arg2 指定bean的方法名
// arg3 方法中的参数列表
MethodUtils.invokeMethod(new Person(), "sayHello", new Object[] {});
// MethodUtils.invokeMethod(Object arg1,String arg2,Object arg3)
// arg1 一个bean的名称
// arg2 指定bean的方法名
// arg3 方法中的参数
MethodUtils.invokeExactMethod(new Person(), "f", "hello");
;
}
// MethodUtils.getAccessibleMethod()--得到方法
public static void getAccessibleMethod() throws Exception {
// MethodUtils.getAccessibleMethod(Class clazz,String methodName,Class[]
// parameterTypes)
// clazz 一个bean的类对象
// methodName bean中的方法名
// parameterTypes 方法中参数的类型列表
System.out.println(MethodUtils.getAccessibleMethod(Person.class, "f",
new Class[] { String.class }));
System.out.println(MethodUtils.getAccessibleMethod(Person.class, "f",
String.class));
}
// ConstructorUtils.invokeConstructor()
public static void invokeConstructor() throws Exception {
// ConstructorUtils.invokeConstructor(Class clazz,Object[] args)
// clazz 一个bean的类对象
// args bean的构造函数的参数列表
Person p1 = (Person) ConstructorUtils.invokeConstructor(Person.class,
new Object[] {});
Person p2 = (Person) ConstructorUtils.invokeConstructor(Person.class,
"Tom");
System.out.println(p2.getName());
}
// ConstructorUtils.getAccessibleConstructor()
public static void getAccessibleConstructor() throws Exception {
// ConstructorUtils.getAccessibleConstructor(Class clazz,Class[]
// parameterTypes)
// clazz 一个bean的类对象
// parameterTypes bean的构造函数的参数类型列表
System.out.println(ConstructorUtils.getAccessibleConstructor(
Person.class, String.class));
System.out.println(ConstructorUtils.getAccessibleConstructor(
Person.class, new Class[] { String.class, String.class }));
}
}