【问题标题】:Mapstruct constructor injection (spring)Mapstruct 构造函数注入(弹簧)
【发布时间】:2019-05-17 03:09:57
【问题描述】:

在 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();
        }
    }
    (...)

所以在我的例子中它应该看起来像这样(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();
        }
    }
    (...)

问题:
所以不可能通过构造函数注入carMapperbikeMapperinjectionStrategy = CONSTRUCTOR 是否仅适用于 @Mapper(uses = {}) 中声明的类?

【问题讨论】:

    标签: mapstruct


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2023-04-07
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2023-01-07
    • 2022-01-05
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多