package com.beanutils;

import java.util.*;


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()...";
}
}
=========================================================================================
package com.beanutils;


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.beanutils;

import java.util.*;
import org.apache.commons.beanutils.*;


public
class BeanUtilsTest
...{

public
static void main(String[] args)
throws Exception
...{
Address address
= new Address();
address.setProvince("hunan");
address.setCity("changsha");
address.setStreet("wuyilu");
address.setZipcode("410000");
List goods
= new ArrayList();
goods.add("sporting");
goods.add("singing");
goods.add("dancing");
Map contact
= new HashMap();
contact.put("student","Tom");
contact.put("teacher","Lucy");
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.getArrayProperty(person);
//BeanUtilsTest.getIndexedProperty(person);
//BeanUtilsTest.getMappedProperty(person);
//BeanUtilsTest.getNestedProperty(person);
//BeanUtilsTest.populate(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("hengyang");
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("hengyang");
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("hengyang");
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(1));
System.out.println(p.getContact().get("student"));
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}));
}
}
===========================================================================
package com.beanutils;

import java.util.*;
import org.apache.commons.beanutils.*;


public
class BasicDynaBeanTest
...{

public
static void main(String[] args)
throws Exception
...{
//创建一个动态属性数组

DynaProperty[] properties =
new DynaProperty[]
...{
new DynaProperty("name",String.class),
new DynaProperty("sex",String.class),
new DynaProperty("age",int.class),
new DynaProperty("address",Map.class)
};
//创建一个BasicDynaClass的实例
//第一个参数设置动态bean的名称
//第二个参数设置BasicDynaBean的类对象
//第三个参数设置一个动态属性数组
BasicDynaClass dynaClass
= new BasicDynaClass("customer",BasicDynaBean.class,properties);
//通过dynaClass得到动态bean的一个实例
DynaBean customer
= dynaClass.newInstance();
//给属性设值
Map map
= new HashMap();
map.put("province","hunan");
map.put("city","changsha");
map.put("street","wuyilu");
map.put("zipcode","410000");
customer.set("name","Tom");
customer.set("sex","male");
customer.set("age",25);
customer.set("address",map);
System.out.println("name:
" + customer.get("name"));
System.out.println("sex:
" + customer.get("sex"));
System.out.println("age:
" + customer.get("age"));
System.out.println("address:
" + ((Map)customer.get("address")).get("province")
+ "
" + ((Map)customer.get("address")).get("city")
+ "
" + ((Map)customer.get("address")).get("street")
+ "
" + ((Map)customer.get("address")).get("zipcode"));
}
}
========================================================================
package com.beanutils;

import org.apache.commons.beanutils.*;


public
class ConvertUtilsTest
...{

public
static void main(String[] args)
...{
Person person
= new Person();
//将任意的实例转变为String,用法非常简单相当与调用toString()方法
System.out.println(ConvertUtils.convert(person));
String str
="123456";
String ary
= "45789";
//int ss = Integer.parseInt(str);
Integer s
=(Integer)ConvertUtils.convert(str,Integer.class);

String[] values =
...{"123","456","789","aafs"};
Object o
= ConvertUtils.convert(values,Integer.class);
System.out.println(o);
}
}
================================================================================
package com.beanutils;

import java.util.*;
import org.apache.commons.beanutils.*;


public
class LazyDynaBeanTest
...{

public
static void main(String[] args)
...{
//创建一个LazyDynaBean的实例,它就和普通的bean一样
LazyDynaBean customer
= new LazyDynaBean();
customer.set("name","Tom");
customer.set("sex","male");
customer.set("age",new
Integer(25));
//以map方式给属性赋值,第一个参数是属性名,第二个参数是键,第三个参数是值
customer.set("address","province","hunan");
//如果属性是一个数组或集合,可以以索引方式赋值
//第一个参数是数组名或集合名,第二个参数是索引,第三个参数是数组和集合中存的值
customer.set("orders",0,"order001");
customer.set("orders",1,"order002");
System.out.println("name:
" + customer.get("name"));
System.out.println("sex:
" + customer.get("sex"));
System.out.println("age:
" + customer.get("age"));
System.out.println("address:
" + ((Map)customer.get("address")).get("province"));
System.out.println("orders:
" + customer.get("orders",0)
+ "
" + customer.get("orders",1));
}