我尝试自动连接我的mapstruct映射器:
@Mapper(uses = {
A.class,
B.class,
C.class
})
public interface WindowDtoMapper {
WindowDtoMapper INSTANCE = Mappers.getMapper(WindowDtoMapper.class);
DetailedDto mapToDetailedDto(Window window);
ReadDto mapToReadDto(Window window);
}
如此:
return WindowDtoMapper.INSTANCE.mapToDetailedDto(window)
但为什么我不能使用:
@RequiredArgsConstructor
public class AAA(){
private final WindowDtoMapper windowDtoMapper;
windowDtoMapper.mapToDetailedDto(window)
}
我得到以下错误:
引起的:org.springframework.beans.factory.NoSuchBeanDefinitionException:不类型限定bean"pl.comp.window.application.mapper.WindowDtoMapper":预计至少有1个bean符合自动候选资格。依赖注释:{}atorg.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound (DefaultListableBeanFactory.java: 1717)在org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency (DefaultListableBeanFactory.java: 1273)
也许我应该继续使用第一个有效的解决方案?这是一个糟糕的解决方案吗?
默认情况下,MapStruct生成普通Java类,仅此而已。Spring无法知道您是否希望这些是bean。
如MapStruct文档中所述,您可以使用@Mapper(componentModel = "spring")
让MapStruct将@Component
放在它创建的类上(您需要确保带有映射器的包正在被组件扫描)。