Spring 在控制器中找不到所需的bean-依赖项注入期间出错

Spring 在控制器中找不到所需的bean-依赖项注入期间出错,spring,spring-boot,Spring,Spring Boot,我有一个非常简单的spring boot应用程序,带有一个简单的硬编码服务,但它不工作,它在hello中为我提供了字段userService。UserController需要一个类型为“services.userService”的bean,但找不到它错误。这是我的应用程序类、控制器类和服务类。问题是当我试图通过@Autowired注释注入userService时。我想这已经在某个地方得到了回答,但我找不到相关的答案。请帮助我或给我指出正确的答案。谢谢 控制器 @RestController @E

我有一个非常简单的spring boot应用程序,带有一个简单的硬编码服务,但它不工作,它在hello中为我提供了
字段userService。UserController需要一个类型为“services.userService”的bean,但找不到它
错误。这是我的应用程序类、控制器类和服务类。问题是当我试图通过
@Autowired
注释注入userService时。我想这已经在某个地方得到了回答,但我找不到相关的答案。请帮助我或给我指出正确的答案。谢谢

控制器

@RestController
@EnableAutoConfiguration
@RequestMapping("/api")

public class UserController {

public static Logger logger = LoggerFactory.getLogger(UserController.class);

@Autowired
UserService userService;

@RequestMapping(value = "/user/", method = RequestMethod.GET)
public ResponseEntity<List<User>> listAllUsers() {
    List<User> users = userService.getAllUsers();
    if(users.isEmpty()) return new ResponseEntity(HttpStatus.NO_CONTENT);

    return new ResponseEntity<List<User>>(users,HttpStatus.OK);
}
服务等级

@Service

public class UserService {

List<User> users;

public UserService() {
    this.users = new ArrayList<>();
    users.add(new User(2, "Altaire", 23));
    users.add(new User(3, "Ezio", 21));
    users.add(new User(4, "Enzo", 23));
}

public User getUser(int id) {
    for (User user : users) {
        if (user.getId() == id) {
            return user;
        }
    }
    return null;
}

public List<User> getAllUsers() {
    return users;
}

public void addUser(User user) {
    users.add(user);
}

public void deleteUser(int id) {
    for (User user : users) {
        if (user.getId() == id) {
            users.remove(user);
        }
    }
}

public void updateUser(int id, String name, int age) {
    for (User user : users) {
        if (user.getId() == id) {
            user.setName(name);
            user.setAge(age);
        }
    }
  }
}
@服务
公共类用户服务{
列出用户名单;
公共用户服务(){
this.users=new ArrayList();
添加(新用户(2,“Altaire”,23));
添加(新用户(3,“Ezio”,21));
添加(新用户(4,“Enzo”,23));
}
公共用户getUser(int-id){
for(用户:用户){
if(user.getId()==id){
返回用户;
}
}
返回null;
}
公共列表getAllUsers(){
返回用户;
}
public void addUser(用户){
用户。添加(用户);
}
public void deleteUser(int-id){
for(用户:用户){
if(user.getId()==id){
用户。删除(用户);
}
}
}
public void updateUser(int-id、字符串名称、int-age){
for(用户:用户){
if(user.getId()==id){
user.setName(name);
用户设置(年龄);
}
}
}
}

在您拥有的应用程序类中

@SpringBootApplication(scanBasePackageClasses = 
{UserController.class})
您还应该添加服务类:

@SpringBootApplication(scanBasePackageClasses = 
{UserController.class,UserService.class})
注意,您还可以使用scanBasePackages,而不仅仅是显式分类,例如

@SpringBootApplication(scanBasePackage = {"com.x.y"})

您还应该显示包和导入,因为它很重要。服务类位于名为services和Controller的模块中,而应用程序类位于不同的模块中。Java中没有模块(至少在Java 9之前没有)。为什么不按要求执行:将代码与其包和导入语句一起发布?如果您开始在
scanBasePackageClasses
中声明每个bean,您的配置实际上无法维护,您失去了扫描优势。这就是为什么我建议使用ScanBasePackages我看到了它。但是你甚至不应该建议第一种方法,总的来说是主要的解决方案。这是一个反模式的春天。
@SpringBootApplication(scanBasePackage = {"com.x.y"})