我有以下映射器类,我想在其中使用 CounterService
.我正在尝试构造函数注入(inject),但这不起作用,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
使用场注入(inject),这样它就可以正常工作。这意味着 Spring 不支持 abstract
的构造函数注入(inject)类(class)。是不是因为abstract
类不能直接实例化,需要一个子类来实例化?有什么办法
mapStruct
可以在实现类中创建一个构造函数: public CarMapperImpl(CounterService counterService){
super(counterService);
}
这样,构造函数注入(inject)应该可以工作。
最佳答案
这与Spring无关。 MapStruct 团队故意决定不使用 super 构造函数。
你可以做的是使用 setter 注入(inject)。
@Mapper(componentModel = "spring", uses = CounterService.class, injectionStrategy = InjectionStrategy.CONSTRUCTOR)
public abstract class CarMapper {
private CounterService counterService;
public abstract Car dtoToEntity(CarDto carDto);
public CarDto entityToDto(Car car) {
System.out.println(counterService)
//....
return carDto;
}
@Autowired
public void setCounterService(CounterService counterService) {
this.counterService = counterService;
}
}
关于spring - 如何将spring bean注入(inject)(custructor)到Mapstruct的抽象映射器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58451618/