SpringのBeanUtilsとPropertyUtilsの使い方の概要


一、紹介:
BeanUtilsはJava反射と自省APIのパッケージを提供します.その主な目的は,反射機構を用いてJavaBeanの属性を処理することである.JavaBeanには通常多くの属性が含まれており、JavaBeanの処理によってget/setコードが大量に蓄積され、コードの長さとコードの読み取りが難しくなることが多いことを知っています.
二、使い方:
BeanUtilsはこのパッケージでよく使われるツールクラスで、ここではcopyProperties()メソッドのみを紹介します.メソッドの定義は次のとおりです.

public static void copyProperties(java.lang.Object dest,java.lang.Object orig) throws java.lang.IllegalAccessException,java.lang.reflect.InvocationTargetException
同じ属性を持つJavaBeanが2つある場合、StrutsのPOオブジェクト(永続オブジェクト)と対応するActionForm、例えばTeacherとTeacherFormが一般的です.一般的にActionでActionFormからPOオブジェクトを構築します.従来の方法では、次のような文を使用して属性を個別に割り当てます.
//もらう
TeacherFormTeacherForm teacherForm=(TeacherForm)form;
//Teacherオブジェクトの構築
Teacher teacher=new Teacher();
//賦課
teacher.setName(teacherForm.getName());
teacher.setAge(teacherForm.getAge());
teacher.setGender(teacherForm.getGender());
teacher.setMajor(teacherForm.getMajor());
teacher.setDepartment(teacherForm.getDepartment());
//Teacherオブジェクトのデータベースへの永続化
HibernateDAO.save(teacher);
BeanUtilsを使用すると、次のようにコードが大幅に変更されます.
//もらう
TeacherFormTeacherForm teacherForm=(TeacherForm)form;
//Teacherオブジェクトの構築
Teacher teacher=new Teacher();
//賦課
BeanUtils.copyProperties(teacher,teacherForm);
//Teacherオブジェクトのデータベースへの永続化
HibernateDAO=;HibernateDAO.save(teacher);
TeacherとTeacherFormの間に名前の異なる属性がある場合、BeanUtilsはこれらの属性を処理しないため、プログラマが手動で処理する必要があります.たとえば、TeacherにはmodifyDate(ユーザーがインタフェースに入力する必要がない最終変更日を記録する属性)が含まれていますが、TeacherFormにはこの属性がありません.この属性は、上のコードのcopyProperties()の後に追加されます.
teacher.setModifyDate(new Date());
どうですか、便利でしょう.BeanUtilsの他にもPropertyUtilsというツールクラスがあります.copyProperties()メソッドも提供されています.BeanUtilsの同名メソッドとよく似ています.主な違いは、後者がタイプ変換機能を提供していることです.つまり、2つのJavaBeanの同名属性が異なるタイプであることが分かった場合、サポートされているデータ型の範囲内で変換されますが、前者はこの機能をサポートしていません.しかし、速度はもっと速くなります.BeanUtilsがサポートする変換タイプは次のとおりです.
* java.lang.BigDecimal   
* java.lang.BigInteger   
* boolean and java.lang.Boolean   
* byte and java.lang.Byte   
* char and java.lang.Character   
* java.lang.Class   
* double and java.lang.Double   
* float and java.lang.Float   
* int and java.lang.Integer   
* long and java.lang.Long   
* short and java.lang.Short   
* java.lang.String   
* java.sql.Date   
* java.sql.Time   
* java.sql.Timestamp
ここで注意したいのは、java.util.Dateはサポートされていませんが、そのサブクラスjava.sql.Dateはサポートされています.したがって、オブジェクトに時間タイプのプロパティが含まれており、変換する場合はjava.sql.Dateタイプを使用する必要があります.そうでない場合、変換時にargument mistype異常が表示されます.