java如何copyproperties
Java 中实现属性拷贝的方法
使用 Apache Commons BeanUtils
Apache Commons BeanUtils 提供 BeanUtils.copyProperties 方法,用于将一个 JavaBean 的属性值拷贝到另一个 JavaBean。
import org.apache.commons.beanutils.BeanUtils;
// 示例代码
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(30);
TargetBean target = new TargetBean();
BeanUtils.copyProperties(target, source);
使用 Spring BeanUtils
Spring Framework 也提供了类似的工具类 BeanUtils.copyProperties,用法与 Apache Commons BeanUtils 类似。

import org.springframework.beans.BeanUtils;
// 示例代码
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(30);
TargetBean target = new TargetBean();
BeanUtils.copyProperties(source, target);
使用 MapStruct
MapStruct 是一个代码生成器,可以生成类型安全的属性映射代码,性能优于反射方式。

@Mapper
public interface BeanMapper {
BeanMapper INSTANCE = Mappers.getMapper(BeanMapper.class);
TargetBean sourceToTarget(SourceBean source);
}
// 示例代码
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(30);
TargetBean target = BeanMapper.INSTANCE.sourceToTarget(source);
手动实现属性拷贝
如果属性较少,可以手动实现属性拷贝,避免引入第三方库。
// 示例代码
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(30);
TargetBean target = new TargetBean();
target.setName(source.getName());
target.setAge(source.getAge());
使用 Dozer
Dozer 是一个强大的对象映射工具,支持复杂对象之间的属性拷贝。
import org.dozer.DozerBeanMapper;
// 示例代码
DozerBeanMapper mapper = new DozerBeanMapper();
SourceBean source = new SourceBean();
source.setName("John");
source.setAge(30);
TargetBean target = mapper.map(source, TargetBean.class);
选择建议
- 简单场景:使用 Apache Commons BeanUtils 或 Spring BeanUtils。
- 高性能需求:使用 MapStruct 或手动实现。
- 复杂对象映射:使用 Dozer。
每种方法各有优缺点,根据具体需求选择最适合的方式。






