我有下面的映射器类,我想在其中使用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不支持抽象
类的构造函数注入。是因为抽象
类不能直接实例化,需要子类来实例化吗?
有没有什么方法mapSTRt
可以在实现类中创建一个构造函数,如下所示:
public CarMapperImpl(CounterService counterService){
super(counterService);
}
这样,构造函数注入应该可以工作。
您还可以使用如下所示的映射器装饰器。此外,始终确保检查生成的类。
@DecoratedWith(CarDecoratorMapper.class)
@Mapper(componentModel = "spring")
public interface CarMapper {
Car dtoToEntity(CarDto carDto);
CarDto entityToDto(Car car);
}
public abstract class CarDecoratorMapper implements CarMapper {
@Autowired
private CarMapper delegate;
@Autowired
private CounterService counterService;
public Car dtoToEntity(CarDto carDto) {
Car car = delegate.dtoToEntity(carDto);
car.setProperty(counterService.count(carDto));
return car;
}
public CarDto entityToDto(Car car) {
CarDto carDto = delegate.entityToDto(car);
carDto.setProperty(counterService.countDto(car));
return carDto;
}
}
这与Spring无关。MapStruct团队慎重决定不使用超级构造函数。
不过,您可以使用setter注入。
@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;
}
}
我正在使用MapStruct,mapstruct-jdk8版本1.1.0.final并定义我通过spring注入的抽象类。 我正在研究如何能够通过Junit测试来测试它们?我有一个基本的主映射器,它将使用2个子映射器 我尝试了几种方法,但无法正确实例化映射器来测试它。 java.lang.RuntimeException:java.lang.ClassNotFoundException:找不到Co
我在为SpringJUnit4ClassRunner.class)配置测试时遇到了问题。我的问题是因为我的映射器从map结构到达时返回null。
问题内容: 我正在使用一个已定义的拦截器,我想从拦截器中通过DAO层进行db调用,所以我如何将Spring bean注入到struts拦截器中。是否可以将spring bean注入到struts拦截器中,任何人都可以提出任何想法在此。 问题答案: 编辑 由于不需要将拦截器声明为Spring bean,因此删除了不必要的部分。感谢@AleksandrM对其进行测试。 就像使用Actions一样,(如
下面是我的DTO。 源DTO 目标DTO
例如,我有以下接口映射器: 在代码中,您可以看到映射和一些默认方法,其中包含其他映射。如何在Mapstruct映射中使用这些方法,以便Mapstruct使用这些方法在字段中填充值?
我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!