今回もよく使うものを紹介します。
Beanの中身を別Beanにコピーしたい場合、getterで取得しsetterでセットします。
メンバが多ければこの作業が多くなり間違いも増えます。
UserBean user = new UserBean();
MemberBean member = new MemberBean();
member.setId(user.getId());
member.setName(user.getName());
・・・
という感じで
このコピー作業を簡単にしてくれるのがタイトルにあるBeanUtils/PropertyUtilsの
copyPropertiesになります。
こちらからjarファイルをダウンロードしてビルドパスに追加。
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
また内部でログ表示の為にcommons-logginを使用しているので
こちらから同様にします。
http://commons.apache.org/proper/commons-logging/download_logging.cgi
使い方は簡単。
PropertyUtils.copyProperties(toBean, fromBean);
BeanUtils.copyProperties(toBean, fromBean);
こんな感じに第二引数に指定したBeanの各メンバの値をを第一引数に
コピーしてくれます。
お互いのBeanで同じ名前のメンバにコピーしますが
名前が異なるメンバは当然コピーしません。
また、内部に同じ型のBeanを持っている場合、そちらもコピーされます。
BeanUtilsは異なる型へも変換してくれます。
intからStringやその逆も可能です。
StringからDateなどの場合は例外が発生しますが。
PropertyUtilsは異なる型へコピーしようとするとIllegalArgumentExceptionが
発生します。
他にもBeanUtils/PropertyUtilsには便利なメソッドがあります。
Beanの中身をMapにコピーしてくれるdescribeや
新しいインスタンスを作ってそこに値をコピーしてくれる
cloneBeanなど
BeanUtilsの中ではPropertyUtilsを使っていたりします。
中を見るとリフレクションの勉強に良さそうです。