Mapstruct - 没有类型的限定 bean
Mapstruct - no qualifying bean of type
我尝试自动连接我的 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)
}
我收到以下错误:
Caused by:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type
'pl.comp.window.application.mapper.WindowDtoMapper' available:
expected at least 1 bean which qualifies as autowire candidate.
Dependency annotations: {} at
org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
也许我应该继续使用第一个可行的解决方案?是不是不好的解决方案?
MapStruct默认生成普通的Java类,仅此而已。 Spring 无法知道您想要这些豆子。
如 the MapStruct documentation 中所述,您可以使用 @Mapper(componentModel = "spring")
让 MapStruct 将 @Component
放在它创建的 类 上(您需要确保包含映射器的包正在接受组件扫描。
我尝试自动连接我的 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)
}
我收到以下错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'pl.comp.window.application.mapper.WindowDtoMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
也许我应该继续使用第一个可行的解决方案?是不是不好的解决方案?
MapStruct默认生成普通的Java类,仅此而已。 Spring 无法知道您想要这些豆子。
如 the MapStruct documentation 中所述,您可以使用 @Mapper(componentModel = "spring")
让 MapStruct 将 @Component
放在它创建的 类 上(您需要确保包含映射器的包正在接受组件扫描。