Top / Java / BeanUtils

BeanUtils - Commons はApache CommonsのライブラリでJavaBeans?のプロパティをコピーする便利なメソッドなどが用意されたユーティリティです。

似たようなプロパティをもつ別のクラス、たとえばStrutsのActionForm?を別のオブジェクトに移し替えるときや、DBのEntityからUI側のオブジェクトに載せ替えたいときなどに、

SrcBean src = ...
DestBean dest = new DestBean();
PropertyUtils.copyProperties(dest, src);

などとするだけで、同じ名称のプロパティを移し替えてくれたりします。

ダウンロード

Beanutils Downloads よりダウンロードできます。またProject Dependenciesを見ると

なども必要みたいですね。

やってみる

SrcBean?のプロパティをDestBean?へ載せ替えることを考えてみます。

package src;

public class SrcBean {
  private String message;
  private boolean[] boolArray;
  private List list;
  private Map map;
  .... Getter/Setterは削除
}
package dest;

public class DestBean {
  private String message;
  private boolean[] boolArray;
  private List list;
  private Map map;
  .... Getter/Setterは削除
 
  @Override
  public String toString() {
    return new ToStringBuilder(this).append("message", message).append(
        "booleanArray", boolArray).append("list", list).append("map",
        map).toString();
  }
}

この例ではSrcBean?DestBean?も同じプロパティを持っているとしています。

各プロパティの値を載せ替えるコードは以下の通りです。

public class Main {
  public static void main(String[] args) throws IllegalAccessException,
      InvocationTargetException, NoSuchMethodException {
    SrcBean src = new SrcBean();
    src.setMessage("ほげほげ");
    boolean[] boolArray = new boolean[] { true, false, true };
    src.setBoolArray(boolArray);

    List<String> list = new ArrayList<String>();
    list.add("first");
    list.add("second");
    src.setList(list);

    Map<String, Object> map = new HashMap<String, Object>();
    map.put("name", "json");
    map.put("bool", Boolean.TRUE);
    map.put("int", new Integer(1));
    map.put("arr", new String[] { "a", "b" });
    map.put("chars", new char[] { 'a', 'b' });
    src.setMap(map);

    DestBean dest = new DestBean();
    PropertyUtils.copyProperties(dest, src);
    System.out.println(dest);
  }
}

実行結果は以下の通り。

dest.DestBean@bb0d0d[
   message=ほげほげ,
   booleanArray={true,false,true},
   list=[first, second],
   map={
     chars=[C@2c1e6b, 
     arr=[Ljava.lang.String;@811c88,
     int=1,
     bool=true,
     name=json
   }
]   整形してます

SrcBean?のプロパティがコピーされていることが確認できました。

コンテンツ一覧

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Java / BeanUtils

現在のアクセス:9034


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS