Spring Boot - Parameter 0 of constructor in com.example.iocdi.controller.UserController required a single bean, but 2 were found
问题描述
如上图所示,在加入了 @MapperScan
注解之后就出现了这个问题。
file:[src/java/config/MybatisConfig.java]
@Configuration
@MapperScan("com.example.iocdi")
public class MybatisConfig {
}
@MapperScan
注解扫描了 com.example.iocdi
下面所有的包:
其中 UserService 和 UserServiceImpl(一个实现类)的类型都是一直的(Java 多态性)。注入的 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 {
}