java bean對象之間復制屬性
在現在的企業級Java應用程序中, Java Bean被廣泛的應用。 一堆的相關的劃分也應運而生, 如DTO, DAO, BO, POJO, VO等。這里不去管這些概念的細節, 如果你感興趣,可以google之, 比如這篇文章。 這里要討論的問題是如何在不同的Java Bean對象之間復制它們的屬性?
這有幾種情況需要考慮:
- 源對象和目標對象的類型可能不同
- 只想復制部分的對象
- 要復制的對象的屬性名字不同
- 如何實現深復制 (deep copy)?
目前有幾個Bean copy庫可以使用:
Dozer
Dozer是一個功能強大的Bean復制庫。 你可以通過Annotation, API或者XML定義Map規則。 XML是最簡單,修改方便,非侵入的方式。
除了最簡單不同類型,不同屬性名稱的轉換外, Dozer還支持:
- 不同類型屬性之間的轉換,如字符串轉為日期類型。 或者定制的類型轉換
- 枚舉類型
- 集合屬性復制,并且支持Array,List,Set之間的轉換
- Map類型的轉換
- 索引屬性
- 深拷貝
- 部分復制
- 單向復制
- 表達式
- …
除此之外, 它還提供了Spring, JMX, JAXB的集成。
如果,實際上大部分,我們不需要這么強大的功能。 比如我們可能只是需要一個clone的功能。 你可以考慮使用 Apache common-beanutils和Spring BeanUtils類。
Apache common-beanutils
BeanUtils 類提供了兩個轉換方法:
static void copyProperties(Object dest, Object orig)
static void copyProperty(Object bean, String name, Object value)
第二個方法用來復制一個特定的屬性。
屬性名字必須一樣, 類型不一樣可能執行默認的數據轉換。 執行淺復制。
它還提供了一個clone
方法。
static Object cloneBean(Object bean)
Spring BeanUtils
Spring BeanUtils提供了更多的功能。
static void copyProperties(Object source, Object target)
Copy the property values of the given source bean into the target bean.
static void copyProperties(Object source, Object target, Class<?> editable)
Copy the property values of the given source bean into the given target bean, only setting properties defined in the given "editable" class (or interface).
static void copyProperties(Object source, Object target, String... ignoreProperties)
Copy the property values of the given source bean into the given target bean, ignoring the given "ignoreProperties".
你可以指定要復制的屬性 (第二種方法)或者排除部分屬性(第三種方法)
來自:http://colobu.com/2014/08/11/Copy-properties-between-java-beans/
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!