Apache-common提高你編程能力的利器-commons-beanutils

 1 概述

   大多數Java開發人員習慣於創建符合屬性getter和setter的JavaBeans命名模式的Java類。通過調用getXxx和setXxx方法獲取java內部屬性  。但是,在某些情況下,需要動態訪問Java對象屬性,此時就需使用反射或者內省機制,在運行時獲取類信息,針對beanutils的使用場景如下:

  • 構建與Java對象模型(例如Bean Scripting Framework)交互的腳本語言。
  • 構建用於Web演示和類似用途的模板語言處理器(例如JSP或Velocity)。
  • 爲JSP和XSP環境構建自定義標記庫(例如Jakarta Taglibs,Struts,Cocoon)。
  • 使用基於XML的配置資源(例如Ant構建腳本,Web應用程序部署描述符,Tomcat的server.xml 文件)。

  Java語言提供了反射和內省的機制,來彌補java的動態性,(具體請參考java.lang.reflect和java.beans包)。但是,這些API可能非常複雜,無法便捷的使用,該 BeanUtils的組件提供圍繞這些功能易於使用的包裝,總結起來就是beanutils包作爲工具類利用反射和內省的原理,可以簡化javabean的動態操作。

 2 依賴模塊

    BeanUtils的1.7.x和1.8.x版本分發了三個版本:

  • commons-beanutils.jar - 包含所有內容
  • commons-beanutils-core.jar - 排除Bean Collections類
  • commons-beanutils-bean-collections.jar - 僅限Bean Collections類

但是最新版本1.9.x的jar已經進行了合併,只對外提供一個jar。

 3 核心子包

Commons BeanUtils一共包括如下5個包:

  • org.apache.commons.beanutils – 核心包,定義一組工具類和需要用到的接口規範。

     核心接口5個:

     

   其中Converter是所有轉化器的頂層接口,BeanInstrospector和InstrospectionContext主要負責內省相關,DynaBean和DynaClass是所有動態操作的接口。除此之外還有一個隊屬性抽象的接口DynaProperty。

  • org.apache.commons.beanutils.converters – 轉換String到需要類型的類,實現Converter接口
  • org.apache.commons.beanutils.locale – beanutils的本地化操作
  • org.apache.commons.beanutils.locale.converters – converters的locale本地化操作,主要針對基本數據類型,還包括時間的本地化操作等
  • org.apache.commons.beantuils.expression – 使用到的Collection類

 

   後三個包主要是用於數據的轉換,圍繞着一個 Converter 接口,該接口只有一個方法:java.lang.Object convert(java.lang.Class type, java.lang.Object value) ,用於將一個 value 轉換成另一個類型爲 type 的 Object。在將字符串類型的數據轉換成日期類型時會使用此方法。
 

方法摘要:

返回值 方法名 說明
static Object cloneBean(Object bean) 克隆對象
static void copyProperties(Object dest, Object orig) 複製屬性
static void copyProperty(Object bean, String name, Object value) 複製屬性
static <K,V> Map<K,V> createCache() 創建緩存
static Map<String,String> describe(Object bean) 描述
static String[] getArrayProperty(Object bean, String name) 返回指定屬性的值,作爲字符串數組返回
static String getIndexedProperty(Object bean, String name) 獲取指定索引位置對象作爲字符串返回
static String getIndexedProperty(Object bean, String name, int index) 獲取指定索引位置對象作爲字符串返回
static String getMappedProperty(Object bean, String name) 獲得Map屬性值作爲字符串返回
static String getMappedProperty(Object bean, String name, String key) 獲得Map屬性中指定鍵的值作爲字符串返回
static String getNestedProperty(Object bean, String name) 獲得嵌套屬性作爲字符串返回
static String getProperty(Object bean, String name) 獲得屬性值作爲字符串返回
static String getSimpleProperty(Object bean, String name) 獲得屬性值作爲字符串返回
static void populate(Object bean, Map<String,? extends Object> properties) 將Map中的數據注入到Bean對象中
static void setProperty(Object bean, String name, Object value) 設置屬性值

 

與之相關聯的還有MethodUtils,ConstructorUtils,PropertyUtils,主要是爲了簡化反射的操作。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章