Ser*_*auk 9 java spring javabeans spring-bean
哪种方法需要最少量的自己编写的代码来实现一个bean到另一个bean的深层复制?目标是在源名称和目标属性按名称匹配时以自动方式执行此操作.
源主豆:
public class SourceBean {
private String beanField;
private SourceNestedBean nestedBean;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
源嵌套bean:
public class SourceNestedBean {
private String nestedBeanField;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
目标主bean:
public class TargetBean {
private String beanField;
private TargetNestedBean nestedBean;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
目标嵌套bean:
public class TargetNestedBean {
private String nestedBeanField;
// getters and setters
}
Run Code Online (Sandbox Code Playgroud)
使用例如Spring BeanUtils.copyProperites()我可以使用一行代码创建一个SourceBean
to 的浅表副本,TargetBean
但它不会复制嵌套bean.是否有任何成熟的实用程序(不一定是Spring Framework)允许在编写尽可能少的代码时进行深层复制(与BeanUtils.copyProperties()几乎相同)?
Fed*_*ner 14
一种方法是通过以下方法与Jackson合作ObjectMapper
:convertValue()
ObjectMapper mapper = new ObjectMapper();
SourceBean source = ...;
TargetBean target = mapper.convertValue(source, TargetBean.class);
Run Code Online (Sandbox Code Playgroud)
请注意,convertValue()
重载也适用于泛型类型.还要注意,convertValue()
在某些情况下会返回您提供的值,例如SourceBean是否可以赋值给TargetBean.
由于Jackson是一个JSON序列化/反序列化库,在内存中convertValue()
序列化为source
JSON,然后将此JSON反序列化为一个实例TargetBean
.所以不能期待高性能.但是,使用一行代码执行转换.
如果您需要性能,最好是手动进行映射.没有比这更好的了.
如果您需要简单,请使用Jackson,如上所述.
一个很好的权衡是Orika,一个高性能的映射器,几乎没有配置不使用反射.
归档时间: |
|
查看次数: |
15486 次 |
最近记录: |