SpringBootApplication未扫描到MapStruct的AccountMapper Bean问题求助
问题解决方案
你的问题根本原因是MapStruct注解处理器未正常生成Mapper接口的实现类,导致Spring容器中不存在AccountMapper类型的Bean,和包扫描的默认逻辑无关,@SpringBootApplication默认会扫描启动类所在包com.example.demo下所有子包的组件,不需要额外加@ComponentScan注解。
1. 检查并补充MapStruct依赖
Maven配置(pom.xml)
要同时引入核心依赖和注解处理器依赖,如果项目同时用了Lombok,还要额外引入适配包避免冲突:
<dependencies> <!-- MapStruct核心依赖 --> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.5.Final</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <!-- 替换为你的JDK版本 --> <target>11</target> <annotationProcessorPaths> <!-- MapStruct注解处理器 --> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.5.Final</version> </path> <!-- 如果用了Lombok需要加下面两个 --> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.28</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build>
Gradle配置(build.gradle)
dependencies { implementation 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' // 用Lombok的话补充下面两个 compileOnly 'org.projectlombok:lombok:1.18.28' annotationProcessor 'org.projectlombok:lombok-mapstruct-binding:0.2.0' }
2. 清理缓存重新编译
添加完依赖后执行以下操作:
- 执行
mvn clean compile(Maven项目)或gradle clean build(Gradle项目) - 清理IDE缓存后重启IDE(IDEA可以点击File -> Invalidate Caches 清理)
- 检查编译后的
target/classes目录下,是否存在com.example.demo.mapper包,包内是否有AccountMapperImpl.class的实现类,存在则说明生成成功
3. (可选)修正包扫描配置
如果之前手动给启动类加了@ComponentScan("com.example.demo.mapper")注解,会覆盖默认的包扫描规则,仅扫描mapper包,需要改为全路径扫描,或者直接删除该注解即可:
// 正确配置,扫描所有子包 @SpringBootApplication @ComponentScan(basePackages = "com.example.demo") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
额外提示:如果你的项目用的是Spring Boot 3+版本,需要将代码中所有
javax.persistence相关的import替换为jakarta.persistence,否则JPA相关的Bean也会注册失败。
内容的提问来源于stack exchange,提问作者nenad.arbutina
相关产品推荐
相关产品推荐

