Common BeanUtils 学习与测试

首先构造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 }));
	}
}


你可能感兴趣的:(BeanUtils)