beanutils研究の心得


Beanutilsはマジックのような反射技術を使って、大げさで役に立つ機能をたくさん実現しました.C/C++時代は考えられません.誰のプロジェクトでも、いつも一日で使えます.私は後で気づいたが、初めて見たときは見逃した.
 
1.属性の動的getter,setter
このフレームワークが空を飛ぶ時代には、getter、setter関数の実行を何事も保証することはできません.属性は名前に基づいて動的に取得する必要がある場合があります.
  
BeanUtils.getProperty(myBean,"code");
で、BeanUtilsがより強力な機能は、カンマで分割するだけで、埋め込まれたオブジェクトのプロパティに直接アクセスすることです.
BeanUtils.getProperty(orderBean, "address.city");

他のクラスライブラリのBeanUtilsは通常簡単で、埋め込まれたオブジェクトにアクセスできないため、JakataのBeanUtilsで置き換えることが多い.
BeanUtilsでは、ListおよびMapタイプのプロパティもサポートされています.次の文法で顧客リストの最初の顧客の名前を取得できます.
BeanUtils.getProperty(orderBean, "customers[1].name");

ここでBeanUtilsはConvertUtilsクラスを使用して文字列をBean属性の真のタイプに変換し、HttpServeretRequestなどのオブジェクトからbeanを抽出したり、beanをページに出力したりするのに便利です.
一方、PropertyUtilsはBeanの元のタイプを原色で保持します.
 
2.beanCompartor動的ソート
やはり反射により,beanのCompareインタフェースで複雑な条件判断を必要とせずにBeanをどの属性で並べ替えるかを動的に設定する.List peoples = ...;//PersonオブジェクトのリストCollections.sort(peoples, new BeanComparator("age")); }}} 「Order By lastName,firstName」など、複数の属性の複合ソートをサポートする場合
ここでComparatorChainはjakata commons-collectionsパッケージに属します.request,resultSetなどのオブジェクトから値を取り出してbeanに割り当てることが多く,次のコードは誰も書き飽きてしまうが,MVCフレームワークのバインド機能がなければ.BeanUtilsのpopulateメソッドまたはgetPropertyに変更すると、setPropertyメソッドはconvertを呼び出して変換されます.または4.2 PropertyUtils、属性のClassタイプを取得
ArrayList sortFields = new ArrayList();
sortFields.add(new BeanComparator("lastName"));
sortFields.add(new BeanComparator("firstName"));
ComparatorChain multiSort = new ComparatorChain(sortFields);
Collections.sort(rows,multiSort);
ComparatorChainはjakata commons-collectionsパッケージに属します.
ageプロパティが通常のタイプでない場合、コンストラクション関数は、age変数のソートのためにcomparatorオブジェクトに追加する必要があります.
 
3.ConverterがRequestの文字列を実际のタイプのオブジェクトに変えるにはrequest,resultSetなどのオブジェクトから値を取り出してbeanに割り当てることがよくありますが、次のコードは谁も书き饱きてしまいます.MVCフレームワークのバインド机能がなければ.
   String a = request.getParameter("a");
   bean.setA(a);
   String b = ....
     MyBean bean = ...;
    HashMap map = new HashMap();
    Enumeration names = request.getParameterNames();
    while (names.hasMoreElements())
    {
      String name = (String) names.nextElement();
      map.put(name, request.getParameterValues(name));
    }
    BeanUtils.populate(bean, map);
BeanUtilsのpopulateメソッドまたはgetPropertyでは、setPropertyメソッドがconvertを呼び出して変換されます.
しかし、Converterはjavaまで基本的なタイプしかサポートしていません.util.Dateタイプもサポートされていません.しかも不器用なのは、知らないタイプに遭遇すると、異常を投げ出すことです.
Dateタイプについては、sqldateタイプを参照してConverterを実装し、日付フォーマットを設定する関数を追加しました.このConverterを登録するには、次の文が必要です.
 
ConvertUtilsBean convertUtils = new ConvertUtilsBean();
    DateConverter dateConverter = new DateConverter();
    convertUtils.register(dateConverter,Date.class);
     //     converter,       BeanUtils      ,    BeanUtilsBean   
     BeanUtilsBean beanUtils = new BeanUtilsBean(convertUtils,new PropertyUtilsBean());      
     beanUtils.setProperty(bean, name, value);

!4      

4.1 PropertyUtils,    Collection,Map      :
 
Collection:   index
{{{   BeanUtils.getIndexedProperty(orderBean,"items",1);
または
  BeanUtils.getIndexedProperty(orderBean,"items[1]");

Map:Key Valueの提供
BeanUtils.getMappedProperty(orderBean, "items","111");//key-value goods_no=111 

または
BeanUtils.getMappedProperty(orderBean, "items(111)");
4.2 PropertyUtils,取得属性のClassタイプ
 
     public static Class getPropertyType(Object bean, String name)

4.3 ConstructorUtils、動的にオブジェクトを作成する
      public static Object invokeConstructor(Class klass, Object arg)

4.4 DynaClass動的クラス