IT/development

[spring] 의존성 주입 시 NPE(NullPointerException)

알 수 없는 사용자 2022. 11. 23. 06:48
반응형

목차

    어디가 잘못되었을까요?

     

    spring에서 의존성 주입 시 자주 발생하는 실수이다.(나다, 내가 그렇다.)

    위 코드에서 어디가 잘못 되었을까? 무엇 때문에 NPE가 발생하는 것일까?

    콘솔에서 친절하게 라인까지 알려주고 있다.

     

    31번 째 라인으로 가보자 

    그냥 board 테이블에 있는 리스트를 페이징해서 가져오는게 전부다.

    원인을 몰랐을 땐 DB에서 가져오는게 null인가? 이런 생각을 했었는데..

    하지만 아래 코드에서는 생성한 list를 조작하는 일이 전혀 없다.(list에서 get해서 뭘 가져온다거나)

    근데 왜 널포인터일까?

     

    디버거로 찍어보자 boardService가 null이다.

    이놈의 객체가 생성 안된거다.

    BoardController에서 BoardService라는 놈을 생성자 주입해서 쓰려고 하는데 이 객체가 null이니..

     

    범인은 아래다.

    컨트롤러 클래스레벨에 @RequiredArgsConstructor 애노테이션을 붙였는데 boardService에 final을 붙이지 않아서 그렇다.

    @RequiredArgsConstructor은 final이나 @NotNull이 붙은 필드를 생성자 방식으로 주입시켜주는데 해당 필드에 final이 없다.

    코딩하면서 실수한 것이다.

     

    아래처럼 final을 붙이고 다시 디버거로 찍어보면 객체가 null이 아닌걸 확인 할 수 있다.

    반응형