Moorper Wiki

我等采石之人,当心怀建造大教堂之愿景。

用户工具

站点工具


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);
}

另外 MapStructObjectFactory 中支持为 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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki