====== MapStruct Object factories ====== 日常在使用 ''MapStruct'' 时 target object 都是由 ''MapStruct'' 直接调用 ''NoArgsConstruct'' 生成的。 还有一种场景就是 target object 有外部依赖需要注入,或者没有 ''NoArgsConstruct'' 方法供我们调用,这里就需要我们配置 ''MapStruct'' 的 ''@Mapper()'' 注解 的 ''uses'' 参数。 这个参数支持配置单个或者多个 ''ObjectFactory'' 工厂类,有两类实现方法,一类是直接写 target object 的生成方法,另一类是写通用 object 的生成方法,示例代码如下,摘自官方文档 @Component public class DtoFactory { public CarDto createCarDto() { return // ... custom factory logic } } @Component public class EntityFactory { public T createEntity(@TargetType Class entityClass) { return // ... custom factory logic } } @Mapper(componentModel = "spring", uses= { DtoFactory.class, EntityFactory.class } ) public interface CarMapper { CarDto carToCarDto(Car car); Car carDtoToCar(CarDto carDto); } 另外 ''MapStruct'' 在 ''ObjectFactory'' 中支持为 ''create'' 添加一个 ''@ObjectFactory'' 注解,当使用该注解时可以将 convertor 中 source object 作为入参使用,示例如下: public class DtoFactory { @ObjectFactory public CarDto createCarDto(Car car) { return // ... custom factory logic } } ===== 参考文献 ===== * [[https://mapstruct.org/documentation/stable/reference/html/#object-factories|object factories - 官方文档]] {{tag>java mapstruct dto}}