• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

23.12.09 17:33 작성 조회수 201

0

안녕하세요

 

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

 

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

답변 1

답변을 작성해보세요.

0

안녕하세요. 키레이님

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

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

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

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

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

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

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

감사합니다.