Spring Boot - Parameter 0 of constructor in com.example.iocdi.controller.UserController required a single bean, but 2 were found

发布时间 2023-09-12 12:44:19作者: Himmelbleu

问题描述

报错截图

如上图所示,在加入了 @MapperScan 注解之后就出现了这个问题。

file:[src/java/config/MybatisConfig.java]
@Configuration
@MapperScan("com.example.iocdi")
public class MybatisConfig {

}

因为这个 @MapperScan 注解扫描了 com.example.iocdi 下面所有的包,

image

而 UserServiceImpl 的接口是 UserService,它们的类型一致,导致注入的 bean 类型重复,不知道哪一个 bean 是对的。

并且,我在 Controller 层中注入的方式是以接口类型作为变量注入的实现类:

file:[src/java/controller/UserController.java]
@RequiredArgsConstructor
@RestController("/user")
public class UserController {

    private final UserService service;

    @GetMapping("/get/all")
    public List<User> getUserAll() {
        return service.queryAll();
    }

}

解决方式

只需要缩小 @MapperScan 扫描的范围即可,让它只扫描 mapper 包下的 bean。

file:[src/java/config/MybatisConfig.java]
@Configuration
del:[@MapperScan("com.example.iocdi")]:del
add:[@MapperScan("com.example.iocdi.mapper")]:add
public class MybatisConfig {

}