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

마이티님의 프로필 이미지
마이티

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

Validator 분리2

@InitBinder의 검증기 생성에 대해서

작성

·

304

0

안녕하세요

 

해당 컨트롤러 안에 init()메서드가 있는경우 애노테이션Validated가 있는 메서드가 호출되는 경우만 init()가 호출 되는 건가요?

 

또 init가 호출될 떄마다 검증기도 새로 생성된다고 했는데 검증기도 객체인데 그 객체를 호출마다 새로 생성하고 리퀘스트 스코프 끝나면 검증기 객체가 자동 삭제되고 다른 호출일 때 또 새로운 검증기 객체가 생성되는 인식이 맞을까요?

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 키레이님

1. 해당 컨트롤러 안에 init()메서드가 있는경우 애노테이션Validated가 있는 메서드가 호출되는 경우만 init()가 호출 되는 건가요?

-> @InitBinder를 통해서 WebDataBinder가 넘어오게 되는데요.

WebDataBinder는 데이터 검증기 뿐만 아니라 Type Conversion, 바인딩 제외 등 여러가지 처리를 진행할 수 있습니다.

따라서 매개변수를 바인딩 하는 경우에 대부분 호출된다고 보시면 됩니다.

추가로 컨트롤러에서 모델에 특정 데이터를 담은 경우에도 호출 됩니다.

2. 또 init가 호출될 떄마다 검증기도 새로 생성된다고 했는데 검증기도 객체인데 그 객체를 호출마다 새로 생성하고 리퀘스트 스코프 끝나면 검증기 객체가 자동 삭제되고 다른 호출일 때 또 새로운 검증기 객체가 생성되는 인식이 맞을까요?

-> WebDataBinder는 새로 생성되지만, ValidationItemControllerV2 코드를 잘 보시면 WebDataBinder에 검증기를 등록할 때 스프링을 통해서 주입 받은 검증기를 넣고 있습니다. 따라서 검증기는 같은 검증기를 재사용하게 됩니다. 물론 new ItemValidator()와 같이 코드를 작성하면 계속 검증기를 불필요하게 생성하게 됩니다.

감사합니다.

마이티님의 프로필 이미지
마이티

작성한 질문수

질문하기