Mapstruct构造函数注入(spring)

use*_*850 6 mapstruct

在mapstruct 中,1.3.0.Final我们通过构造函数进行依赖注入。文档说:

生成的映射器将注入uses 属性中定义的所有类

(...)

对于抽象类或装饰器,应使用 setter 注入。

我有以下示例:

@Mapper
public abstract class VehicleMapper {

    @Autowired
    private CarMapper carMapper;
    @Autowired
    private BikeMapper bikeMapper;

    @Override
    public VehicleDTO toDto(final Vehicle source) {

        if (source instanceof Car) {
            return carMapper.toDto((Car) source);
        } else if (source instanceof Bike) {
            return bikeMapper.toDto((Bike) source);
        } else {
            throw new IllegalArgumentException();
        }
    }
    (...)
Run Code Online (Sandbox Code Playgroud)

所以在我的例子中它应该看起来像这样(componentModel在maven中定义):

@Mapper
public abstract class VehicleMapper {

    private CarMapper carMapper;
    private BikeMapper bikeMapper;

    @Autowired
    public void setCarMapper(final CarMapper carMapper) {
        this.carMapper = carMapper;
    }

    @Autowired
    public void setBikeMapper(final BikeMapper bikeMapper) {
        this.bikeMapper = bikeMapper;
    }

    @Override
    public VehicleDTO toDto(final Vehicle source) {

        if (source instanceof Car) {
            return carMapper.toDto((Car) source);
        } else if (source instanceof Bike) {
            return bikeMapper.toDto((Bike) source);
        } else {
            throw new IllegalArgumentException();
        }
    }
    (...)
Run Code Online (Sandbox Code Playgroud)

问题:
那么不可能通过构造函数注入carMapperand吗?bikeMapper仅适用于在?injectionStrategy = CONSTRUCTOR中声明的类@Mapper(uses = {})

Sja*_*aak 7

我认为这injectionStrategy = CONSTRUCTOR适用于带有注释的界面@Mapper。我认为它不适用于抽象类。我确信当您定义自己的字段(实例变量)时它不会起作用。MapStruct 如何知道要在构造函数中初始化哪些用户定义字段?