下载地址:http://commons.apache.org/beanutils/
例子如下:
新建Bean:
package
demo.bean;

import
java.util.ArrayList;
import
java.util.HashMap;


public
class
Company
...
{

private String name;
private HashMap<String, String> address = new HashMap<String, String>();
private String[] otherInfo;
private ArrayList<String> product;
private ArrayList<String> employee;
private HashMap<String, String> telephone;

public String getName() ...{
return name;
}

public void setName(String name) ...{
this.name = name;
}

public HashMap<String, String> getAddress() ...{
return address;
}

public void setAddress(HashMap<String, String> address) ...{
this.address = address;
}

public String[] getOtherInfo() ...{
return otherInfo;
}

public void setOtherInfo(String[] otherInfo) ...{
this.otherInfo = otherInfo;
}

public ArrayList<String> getProduct() ...{
return product;
}

public void setProduct(ArrayList<String> product) ...{
this.product = product;
}

public ArrayList<String> getEmployee() ...{
return employee;
}

public void setEmployee(ArrayList<String> employee) ...{
this.employee = employee;
}

public HashMap<String, String> getTelephone() ...{
return telephone;
}

public void setTelephone(HashMap<String, String> telephone) ...{
this.telephone = telephone;
}
}
A.BeanUtils可以直接get和set一个属性的值。
package
demo;

import
java.lang.reflect.InvocationTargetException;
import
java.util.HashMap;

import
org.apache.commons.beanutils.BeanUtils;

import
demo.bean.Company;


public
class
BeanUtilsDemo
...
{


public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException ...{
Company c = new Company();
c.setName("Lucy");
System.out.println(BeanUtils.getProperty(c, "name"));
HashMap<String, String> am = new HashMap<String, String>();
am.put("1","234-222-1222211");
am.put("2","021-086-1232323");
BeanUtils.setProperty(c,"telephone",am);
System.out.println(c.getTelephone().get("1"));
}
}
B.copyProperty方法可以直接进行Bean之间的clone。
package
demo;

import
java.lang.reflect.InvocationTargetException;

import
org.apache.commons.beanutils.BeanUtils;

import
demo.bean.Company;


public
class
BeanUtilsDemo
...
{


public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException ...{
Company c = new Company();
c.setName("Lucy");
Company c2 = new Company();
BeanUtils.copyProperties(c2, c);
System.out.println(BeanUtils.getProperty(c2, "name"));
}
}
注:但是这种copy都是浅拷贝,复制后的2个Bean的同一个属性可能拥有同一个对象的ref,这个在使用时要小心,特别是对于属性为自定义类的情况。
C.populate方法用于将一个map的值填充到一个bean中。
package
demo;

import
java.lang.reflect.InvocationTargetException;
import
java.util.HashMap;

import
org.apache.commons.beanutils.BeanUtils;

import
demo.bean.Company;


public
class
BeanUtilsDemo
...
{


public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException ...{
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", "Lucy");
Company c = new Company();
BeanUtils.populate(c, map);
System.out.println(c.getName());
}
}
D.LazyDynaBean,实现一个动态的Bean,可以直接往里面加入属性,作为一个JavaBean一样使用,也可以用上面的BeanUtils或get/set方法进行操作,而不用事先定义一个标准的JavaBean类
package
demo;

import
java.lang.reflect.InvocationTargetException;
import
java.util.Map;

import
org.apache.commons.beanutils.LazyDynaMap;


public
class
BeanUtilsDemo
...
{

public static void main(String[] args) throws IllegalAccessException,

InvocationTargetException, NoSuchMethodException ...{

LazyDynaMap dynaBean1 = new LazyDynaMap();
dynaBean1.set("foo", "bar");
dynaBean1.set("customer", "title", "Mr");
dynaBean1.set("address", 0, "address1");
System.out.println(dynaBean1.get("address", 0));
Map myMap = dynaBean1.getMap();
System.out.println(myMap.toString());
}
}
注:对于这个类还有两个重要的Field要注意:returnnull——指定在get方法使用了一个没有定义过的property时,DynaBean的行为//取的字段的信息
dynaBean1.setReturnNull(true);//设为ture。若Bean中没有此字段,返回null
//默认为false。若Bean中没有此字段,自动增加一个:)
System.out.println(dynaBean1.get("aaa"));//此时返回null
Restricted——指定是否允许改变这个bean的property。
//MutableDynaClass.setRestricted设为true后,字段不可再增删和修改.
//默认为false,允许增删和修改
dynaBean1.setRestricted(true);
dynaBean1.set("test","error");//这里会出错!
过设置这两个属性,可以防止意外修改DynaBean的property。在设计架构时,你可以在后台从数据表或xml文件自动产生DynaBean,在传到控制层和表示层之前设置上述属性使其Bean结构不允许修改,如此就不可能无意中修改Bean包含的属性。
E.BeanUtils和PropertyUtils
这两个类几乎有一摸一样的功能,唯一的区别是:BeanUtils在对Bean赋值是会进行类型转化。举例来说也就是在copyProperty时只要属性名相同,就算类型不同,BeanUtils也可以进行copy;而PropertyBean则可能会报错!!
当然,若实现了org.apache.commons.beanutils.Converter接口则可以自定义类型之间的转化。
由于不做类型转化,用PropertyUtils在速度上会有很大提高!
详细请参阅:http://www.nihaoblog.com/1_5146.html