首页 > 解决方案 > Autowired Service 在特定方法中为空

问题描述

我有一个 Spring Boot 应用程序,突然间,自动装配的服务在特定方法返回 null。

这是控制器的代码片段:

@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserManagementController {

  @Autowired
  private UserService userService;

  ...

  @PostMapping("/register")
  private GameInfo register(@RequestBody UserInfo userInfo) {
    User user = new User();
    ...
    user.setUsername("user-" + userService.count());
    ...
    return gameController.getGameInfo(user);
  }

  ...

  @PostMapping("/statistics")
  public StatisticsInfo statistics(
        @RequestParam(name = "username", required = true) String username,
        Authentication authentication) {
    User user = userService.findByUsername(username);
    ...
  }
}

在第userService一种方法中为 null,在第二种方法中工作正常。

更新: 这是 UserService 的代码片段,它在“注册”方法中为空。

@Service
public class UserService implements UserDetailsService {

    @Autowired
    private UserRepository repository;

    public long count() {
        return repository.count();
    }    
    ...
}

具有正常的userServiceCRUD 方法。请注意,userService 为 null,因此当我调用它的任何方法时都会引发 NullPointerException。

更新 2:

我创建了错误方法的克隆register并将其命名dontRegister,这神奇地解决了问题,register但在新方法中引入了相同的问题。

我不明白这背后的逻辑,因为我似乎总是需要添加一个额外的未使用的方法。

在有人提出解释之前,我会一直保持这个问题。

标签: javaspringspring-boot

解决方案


你的注册方法是private,make it public。从逻辑上讲,它应该是公共的,因为它是从包外部调用的。


推荐阅读