我有一个spring引导应用程序,突然,autowired服务在特定方法返回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
在第一个方法中为空,在第二个方法中工作良好。
更新:下面是UserService的代码片段,它在"register"中为空方法。
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepository repository;
public long count() {
return repository.count();
}
...
}
userService
具有正常的CRUD方法。请注意,userService是空的,所以当我调用它的任何方法时都会抛出NullPointerException。
更新2:
我创建了一个有缺陷的方法register
的克隆,并将其命名为dontRegister
,这神奇地解决了register
的问题,但在新方法中引入了同样的问题。
我不明白这背后的逻辑,因为我似乎总是需要添加一个额外的未使用的方法。
我会保留这个问题,直到可能有人提出一个解释。
您的注册方法是private
,使其为public
。从逻辑上讲,它应该是公共的,因为它是从包外部调用的。