갑자기 특정 메서드에서 null을 반환하는 autowired 서비스가있는 스프링 부팅 응용 프로그램이 있습니다.
다음은 컨트롤러의 코드 스 니펫입니다.
@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
첫 번째 방법에서 널과 두 번째로 잘 작동한다.
업데이트 : 다음은 "register"메소드에서 null 인 UserService에 대한 코드 스 니펫입니다.
@Service
public class UserService implements UserDetailsService {
@Autowired
private UserRepository repository;
public long count() {
return repository.count();
}
...
}
는 userService
일반적인 CRUD 방법이있다. userService가 null이므로 해당 메서드를 호출하면 NullPointerException이 throw됩니다.
업데이트 2 :
나는 결함이있는 메서드의 복제본을 만들고 register
이름을 지정했습니다 dontRegister
. 이것은 마법처럼 문제를 해결 register
했지만 새로운 메서드에서 동일한 문제를 도입했습니다.
나는 항상 사용하지 않는 방법을 하나 더 추가해야하는 것처럼 보이므로이 논리를 이해하지 못합니다.
누군가가 설명을 내놓을 때까지 질문을 열어 두겠습니다.