程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Jakarta-Common-BeanUtils使用筆記

Jakarta-Common-BeanUtils使用筆記

日期:2017/1/16 9:11:38      編輯:關於JAVA

下載地址: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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved