Spring项目中MapStruct Mapper无法通过@Autowired注入报错求助
MapStruct Bean找不到问题排查步骤
- 检查依赖配置完整性:pom.xml需同时引入
mapstruct核心依赖和mapstruct-processor注解处理器,注解处理器必须配置在maven编译插件的<annotationProcessorPaths>节点下。若项目同时使用Lombok,需按Lombok、lombok-mapstruct-binding、MapStruct注解处理器的顺序配置,且保证各组件版本适配。
正确配置参考:
<dependencies> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>对应MapStruct版本号</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1及以上版本</version> <configuration> <source>JDK版本</source> <target>JDK版本</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>对应Lombok版本号</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>对应MapStruct版本号</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
- 检查启动类包扫描范围:
@SpringBootApplication默认仅扫描启动类所在包及其子包,若UserEntityMapper所在包不在默认扫描范围内,需手动指定@SpringBootApplication(scanBasePackages = "com.application")覆盖默认扫描路径。 - 检查Mapper实现类生成状态:执行
mvn clean compile后,查看target/generated-sources/annotations目录下是否生成UserEntityMapperImpl实现类,且实现类上是否标注@Component注解。未生成则说明注解处理器未生效,优先排查依赖配置问题。 - 检查IDE注解处理开关:IDEA环境下需进入
Settings > Build, Execution, Deployment > Compiler > Annotation Processors,勾选Enable annotation processing选项后重新编译。 - 检查依赖冲突:执行
mvn dependency:tree | grep mapstruct排查是否存在多版本MapStruct依赖冲突,统一版本后重新编译即可。
内容的提问来源于stack exchange,提问作者Anshuman
相关产品推荐
相关产品推荐

