配置说明
目标类配置说明
因为每个类均可能拷贝到多个目标,例如:FooDto可能会拷贝到Foo,也可能拷贝到FooVo等。并且拷贝到不同目标时需要的映射配置一般来说是有差异的。
从2.3.0版本开始,所有的映射类注解(@Mapping
/@DictMapping
/@Nested
)均支持目标类的配置(targetClass
/targetClassName
),用于区分此注解配置的作用目标,防止拷贝时发生意外的处理。
以@Mapping
注解为例:
示例1
A和B类的实例互相拷贝时,A.a映射字段为B.b
A和C类的实例互相拷贝时,A.a映射字段为C.c
A和D类(所有其他的类)的实例互相拷贝时,A.a映射字段为D.a
示例2
A和B类的实例互相拷贝时,A.a映射字段为B.b
A和C类的实例互相拷贝时,A.a映射字段为C.c
A和D类(所有其他的类)的实例互相拷贝时,A.a映射字段为D.d
不配置targetClass
表示通用配置,BeanUtils
在拷贝时会选取第一个匹配的注解,所以通用配置必须放在最后。
类(Class)类型的属性配置说明
某些情况下参与拷贝的类(如DTO)可能需要单独打包供其他系统使用,此时如果注解中有Class
类型的属性,可能会因为和其他类的耦合导致打包失败(或者打包内容中包含各种不需要的类)。
从2.3.0版本开始,所有的映射类注解(@Mapping
/@DictMapping
/@Nested
)中类型为Class
的属性配置,均提供对应的className(类的全路径名)配置,用于避免和系统中其他类的耦合问题。
以@DictMapping
注解为例:
修改前
A和B类的实例互相拷贝时,A.a和映射字段B.a采用MyResolver类处理字典映射
A和C类(所有其他的类)的实例互相拷贝时,A.a和映射字段C.a原样拷贝(不使用配置的字典映射)
修改后
修改前后的效果是相同的。
className属性配置的优先级高于class属性的优先级。
Last updated