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