인프런 커뮤니티 질문&답변

최동혁님의 프로필 이미지
최동혁

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

닉네임 수정

Validator의 Bean 등록 여부에 따른 동작 차이에 대해 질문있습니다.

작성

·

185

0

Validator를 Bean으로 등록해서 자동 주입으로 받아와서 사용하는 것과 new로 선언해서 사용하는 것에 동작상의 차이가 있나요?

 닉네임 수정하고 변경하기 버튼 누르면 NullPointException이 나더라구요.

에러가 나는 지점이 Validator에서 Repository 읽어오는 부분에서 에러가 발생했다고 나와요.

그래서 디버깅으로 찍어봤을땐 원하는대로 값 다 들어왔었는데 동작을 안했습니다.

일단 문제 해결은 Contorller쪽에서 NicknameValidator 사용 할 때 자동 주입으로 받아와서 사용하니깐 해결 되더라구요.

근데 Password의 Validator는 new로 선언했었구 sing-up이랑 Nickname에서는 자동 주입 사용하는데 이 두개의 동작이 이런 에러가 날정도로 차이가 존재하나요?

빈으로 등록하면 스프링 컨테이너 라이프 사이클을 사용할 수 있는 점 이외에는 동작상 차이가 없는것 아닌가요 ?

답변 2

1

백기선님의 프로필 이미지
백기선
지식공유자

차이가 있죠. 일단 Repository는 빈이고, 스프링이 빈으로 관리하는 객체들만 의존성 주입을 받을 수 있습니다. Validator가 Repository를 사용하고 있고 Repository를 빈으로 주입받아 사용할거라면 Validator도 역시 빈으로 등록해야 합니다. 그래서 Validaotr가 사용할 Repository를 스프링이 의존성 주입을 해줄테니까요.

그래서 new로 선언해서 사용한 경우 Vadalitor가 사용하는 Repository 객체가 주입이 안됐을거고 그래서 NullPointerException이 발생했을 겁니다.

수강 기록을 봤더니 스프링 프레임워크 핵심 기술도 수강하신걸로 보이는데 다시 한번 복습하시는게 좋을 거 같습니다.

0

최동혁님의 프로필 이미지
최동혁
질문자

답변 감사합니다 !

최동혁님의 프로필 이미지
최동혁

작성한 질문수

질문하기