java bean对象之间复制属性
- - Java - 编程语言 - ITeye博客在现在的企业级Java应用程序中, Java Bean被广泛的应用. 一堆的相关的划分也应运而生, 如DTO, DAO, BO, POJO, VO等. 这里不去管这些概念的细节, 如果你感兴趣,可以google之, 比如 这篇文章. 这里要讨论的问题是如何在不同的Java Bean对象之间复制它们的属性.
在现在的企业级Java应用程序中, Java Bean被广泛的应用。 一堆的相关的划分也应运而生, 如DTO, DAO, BO, POJO, VO等。这里不去管这些概念的细节, 如果你感兴趣,可以google之, 比如 这篇文章。 这里要讨论的问题是如何在不同的Java Bean对象之间复制它们的属性?
这有几种情况需要考虑:
目前有几个Bean copy库可以使用:
Dozer
Dozer是一个功能强大的Bean复制库。 你可以通过Annotation, API或者XML定义Map规则。 XML是最简单,修改方便,非侵入的方式。
除了最简单不同类型,不同属性名称的转换外, Dozer还支持:
除此之外, 它还提供了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".
你可以指定要复制的属性 (第二种方法)或者排除部分属性(第三种方法)