【发布时间】:2019-10-18 13:10:11
【问题描述】:
我有以下映射器类,我想在其中使用CounterService。我正在尝试构造函数注入,但这不起作用,null 正在打印。
@Mapper(componentModel = "spring", uses = CounterService.class, injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public abstract class CarMapper {
private CounterService counterService;
public CarMapper(CounterService counterService) {
this.counterService = counterService;
}
public abstract Car dtoToEntity(CarDto carDto);
public CarDto entityToDto(Car car) {
System.out.println(counterService)
//....
return carDto;
}
}
mapStruct的实现类
@Component
public class CarMapperImpl extends CarMapper{
@Override
public Car dtoToEntity(CarDto carDto){
//...
}
}
如果我使用@AutoWired 使用字段注入,那么它可以正常工作。这意味着 Spring 不支持 abstract 类的构造函数注入。是不是因为abstract类不能直接实例化,需要子类来实例化?
有什么办法mapStruct可以在实现类中创建一个构造函数:
public CarMapperImpl(CounterService counterService){
super(counterService);
}
这样,构造函数注入应该可以工作。
【问题讨论】:
标签: spring spring-boot mapstruct