當前位置:編程學習大全網 - 熱門推薦 - 始終會用上的Common BeanUtils

始終會用上的Common BeanUtils

 Beanutils用了魔術般的反射技術 實現了很多誇張有用的功能 都是C/C++時代不敢想的 無論誰的項目 始終壹天都會用得上它 我算是後知後覺了 第壹回看到它的時候居然錯過

  屬性的動態getter setter

在這框架滿天飛的年代 不能事事都保證執行getter setter函數了 有時候屬性是要根據名字動態取得的 就像這樣 

 BeanUtils getProperty(myBean code );

而Common BeanUtils的更強功能在於可以直接訪問內嵌對象的屬性 只要使用點號分隔

 BeanUtils getProperty(orderBean address city );

相比之下其他類庫的BeanUtils通常都很簡單 不能訪問內嵌的對象 所以有時要用Commons BeanUtils來替換它們 BeanUtils還支持List和Map類型的屬性 如下面的語法即可取得Order的顧客列表中第壹個顧客的名字

 BeanUtils getProperty(orderBean customers[ ] name );

其中BeanUtils會使用ConvertUtils類把字符串轉為Bean屬性的真正類型 方便從HttpServletRequest等對象中提取bean 或者把bean輸出到頁面 而PropertyUtils就會原色的保留Bean原來的類型

  BeanCompartor 動態排序

還是通過反射 動態設定Bean按照哪個屬性來排序 而不再需要在實現bean的Compare接口進行復雜的條件判斷

 List peoples = ; // Person對象的列表Collections sort(peoples new BeanComparator( age ));

 如果要支持多個屬性的復合排序 如 Order By lastName firstName

 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 mons collections包 如果age屬性不是普通類型 構造函數需要再傳入壹個parator對象為age變量排序 另外 BeanCompartor本身的ComparebleComparator 遇到屬性為null就會拋出異常 也不能設定升序還是降序 這個時候又要借助mons collections包的ComparatorUtils

 Comparator mycmp = ComparableComparator getInstance();mycmp = ComparatorUtils nullLowComparator(mycmp);? //允許null? mycmp = ComparatorUtils reversedComparator(mycmp); //逆序? Comparator cmp = new BeanComparator(sortColumn mycmp);

Converter 把Request或ResultSet中的字符串綁定到對象的屬性

 經常要從request resultSet等對象取出值來賦入bean中 如果不用MVC框架的綁定功能的話 下面的代碼誰都寫膩了

 String a = request getParameter( a ); bean setA(a); String b = bean setB(b);

 不妨寫壹個Binder自動綁定所有屬性:

 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);

其他功能 ConstructorUtils 動態創建對象

 public static Object invokeConstructor(Class klass Object arg)

MethodUtils 動態調用方法

 MethodUtils invokeMethod(bean methodName parameter);

PropertyUtils 當屬性為Collection Map時的動態讀取 Collection: 提供index

 BeanUtils getIndexedProperty(orderBean items );

或者

 BeanUtils getIndexedProperty(orderBean items[ ] );

Map: 提供Key Value

 BeanUtils getMappedProperty(orderBean items );//key value goods_no=

或者

 BeanUtils getMappedProperty(orderBean items( ) )

PropertyUtils 直接獲取屬性的Class類型 lishixinzhi/Article/program/Java/Javascript/201311/25458

  • 上一篇:幼兒園手掌畫教案
  • 下一篇:石家莊寶寶巴士怎麽乘坐
  • copyright 2024編程學習大全網