카테고리 없음

특정 메서드에서 Autowired 서비스가 null입니다.

기록만이살길 2021. 2. 27. 05:25
반응형

특정 메서드에서 Autowired 서비스가 null입니다.

1. 질문(문제점):

갑자기 특정 메서드에서 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했지만 새로운 메서드에서 동일한 문제를 도입했습니다.

나는 항상 사용하지 않는 방법을 하나 더 추가해야하는 것처럼 보이므로이 논리를 이해하지 못합니다.

누군가가 설명을 내놓을 때까지 질문을 열어 두겠습니다.

2. 해결방안:

당신의 등록 방법은 private, 그것을 만드십시오 public. 논리적으로 패키지 외부에서 호출되므로 어쨌든 공개되어야합니다.

65781760
반응형