JavaBean操作工具類,Commons BeanUtils 1.9.1 發布
在開發過程中,通常會遇到一些特殊的需求,比如拷貝對象,不同類的對象之間設置公有屬性的值等,apache的開源框架commons-beanutils提供了強大的支持,該框架廣泛用于其他框架中如struts,hibernate,spring中。
1、對象克隆,對象屬性復制(基于以下類)
類定義
public class Huma{
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Huma2{
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}</pre>
測試代碼
1-1、對象克隆
Huma huma=new Huma();
huma.age=3;
Huma huma2=(Huma)BeanUtils.cloneBean(huma);
System.out.println(huma2.age);
需注意的是Huma的訪問修飾符必須是public,否則在其他包下無法訪問,從而導致拋出異常
另外Huma必須有setXXX,getXXX方法,否則也是無法克隆的,關于這點似乎美中不足吧
1-2、屬性復制
兩個不同類型的對象,如果屬性名稱相同,類型相同,且有對應的setXXX,getXXX方法,也可以進行屬性復制
,注意上面說的屬性相同必須滿足有相同的setXXX和getXXX方法,并不要求屬性名真的要一樣
Huma huma=new Huma();
huma.age=3;
Huma2 huma2=new Huma2();
BeanUtils.copyProperties(huma2, huma);//將第二個參數的屬性值復制到第一個參數相同的名稱的屬性上</pre>
調用以上代碼huma2.age=3
二、動態創建未知類型對象,動態添加未知對象的屬性
DynaProperty []pros=new DynaProperty[]{
new DynaProperty("name", String.class),
new DynaProperty("age", int.class)};
DynaClass dynaC=new BasicDynaClass("Girl", null,pros);
DynaBean bean=dynaC.newInstance();
bean.set("name", "wang zhao jun"); //也可以PropertyUtils.setProperty(bean, "name", "wang zhao jun")
bean.set("age", 18);
System.out.println(bean.getClass());
System.out.println("name:"+bean.get("name"));
System.out.println("age:"+bean.get("age"))</pre>
這樣就動態生成擁有任何屬性的javabean了
1.9.1版本是一個bug修復版,解決1.9.0版本引入的一個自定義內省新功能的問題。
所需的最低Java版本是1.5。
=========================
- [BEANUTILS-456] 對于通過自定義內省獲取的PropertyDescriptors, 現在額外信息防止寫入方法在垃圾收集過程中會丟失</pre> 項目地址:http://commons.apache.org/proper/commons-beanutils/