继承的是@Mapping中的配置对吗
时间: 2024-02-20 17:02:41 浏览: 153
@InheritConfiguration 注解默认继承的是 @Mapping 注解中的配置,包括源属性和目标属性的名称、类型转换器、映射表达式等信息。
如果需要继承其他配置,比如 @Mapper、@Mappings、@BeforeMapping、@AfterMapping 等注解中的配置,可以结合使用 @InheritConfiguration 和 @InheritInverseConfiguration 注解来实现。
举例来说,如果你有一个映射器接口 MyMapper,其中定义了一个映射方法 mapA,然后你需要定义一个新的映射方法 mapB,mapB 和 mapA 的大部分配置相同,但是有一些不同,你可以这样定义 mapB:
```java
@Mapper(config = MyMapperConfig.class)
public interface MyMapper {
@Mappings({
@Mapping(source = "name", target = "fullName"),
@Mapping(source = "age", target = "ageInYears")
})
PersonDto toPersonDto(Person person);
@InheritConfiguration(name = "toPersonDto")
@Mapping(source = "email", target = "emailAddress")
void updatePersonFromDto(PersonDto dto, @MappingTarget Person person);
@InheritInverseConfiguration(name = "toPersonDto")
void updatePersonFromDto(PersonDto dto, @MappingTarget @Mapping(source = "emailAddress", target = "email") Person person);
}
```
在上面的示例中,我们使用 @InheritConfiguration 注解继承了 toPersonDto 方法中的大部分配置,然后使用 @Mapping 注解来定义 email 属性的映射关系。同时,我们还使用了 @InheritInverseConfiguration 注解来继承逆向映射的配置,其中包括源属性和目标属性的名称、类型转换器、映射表达式等信息。
注意,在使用 @InheritConfiguration 和 @InheritInverseConfiguration 注解时,需要指定被继承的方法名称,可以使用 name 属性来指定。如果被继承的方法是当前映射器接口中的方法,可以直接指定方法名称;如果被继承的方法在其他映射器接口中,需要使用 qualifiedByName 属性来指定方法的全限定名称。
阅读全文