在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 = {})
我认为这injectionStrategy = CONSTRUCTOR适用于带有注释的界面@Mapper。我认为它不适用于抽象类。我确信当您定义自己的字段(实例变量)时它不会起作用。MapStruct 如何知道要在构造函数中初始化哪些用户定义字段?
| 归档时间: |
|
| 查看次数: |
11551 次 |
| 最近记录: |