blog:java:mapstruct-object-factories
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 extends BaseEntity> T createEntity(@TargetType Class<T> 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 } }
参考文献
blog/java/mapstruct-object-factories.txt · 最后更改: 由 Where.Liu
