Spring项目注入MapStruct的Mapper时提示找不到Bean该如何解决
问题原因排查
首先明确:未安装MapStruct IDE插件不会导致该问题,插件仅提供代码跳转、语法校验等辅助功能,不参与Mapper实现类的生成逻辑,你的问题核心是MapStruct注解处理器未正常生成带Spring注解的Mapper实现类,或是生成的实现类未被Spring扫描到。
解决方案
按以下顺序逐一排查修复:
修正Gradle配置适配Eclipse
Eclipse的Gradle插件默认不会自动识别annotationProcessor生成的源码目录,需要在
build.gradle中补充eclipse配置:plugins { // 保留原有插件,新增以下行 id 'eclipse' } // 新增以下配置块 eclipse { jdt { apt { genSrcDir = file('build/generated/sources/annotationProcessor/java/main') aptEnabled = true } } }配置完成后在项目根目录执行命令
gradle clean eclipse,再刷新IDE中的项目。确认包扫描范围
检查SpringBoot启动类的位置,确保
@SpringBootApplication注解能扫描到Mapper所在的com.api.gestioncartera.Services.Mappers包:- 如果启动类在
com.api.gestioncartera根包下无需额外配置 - 如果启动类在子包中,需要在启动类上补充注解:
@SpringBootApplication(scanBasePackages = "com.api.gestioncartera")
- 如果启动类在
清理缓存重新编译
- 执行
gradle clean build命令全量编译项目 - 检查
build/generated/sources/annotationProcessor/java/main目录下是否生成了CollectionCompanyMapperImpl.class文件 - 若文件已生成但IDE未识别,手动将该目录加入项目源码路径:右键项目 -> Build Path -> Configure Build Path -> Source -> Add Folder,选中上述目录后保存。
- 执行
冗余注解移除(可选)
你在Mapper接口上同时加了
@Mapper(componentModel = "spring")和@Component,其中@Component是冗余的,MapStruct生成的实现类会自动带上Spring的组件注解,不会影响运行但可以移除避免混淆。
内容的提问来源于stack exchange,提问作者DavidCediel12
相关产品推荐
相关产品推荐

