Jakarta-Common-BeanUtils使用笔记

下载地址: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 address = new HashMap();   private String[] otherInfo;   private ArrayList product;   private ArrayList employee;   private HashMap telephone;   public String getName() ...{     return name;   }   public void setName(String name) ...{     this.name = name;   }   public HashMap getAddress() ...{     return address;   }   public void setAddress(HashMap address) ...{     this.address = address;   }   public String[] getOtherInfo() ...{     return otherInfo;   }   public void setOtherInfo(String[] otherInfo) ...{     this.otherInfo = otherInfo;   }   public ArrayList getProduct() ...{     return product;   }   public void setProduct(ArrayList product) ...{     this.product = product;   }   public ArrayList getEmployee() ...{     return employee;   }   public void setEmployee(ArrayList employee) ...{     this.employee = employee;   }   public HashMap getTelephone() ...{     return telephone;   }   public void setTelephone(HashMap 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 am = new HashMap();     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 map = new HashMap();     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

每个人心中,都会有一个古镇情怀,流水江南,烟笼人家。

Jakarta-Common-BeanUtils使用笔记

相关文章:

你感兴趣的文章:

标签云: