작성
·
304
답변 1
2
안녕하세요. 키레이님
1. 해당 컨트롤러 안에 init()메서드가 있는경우 애노테이션Validated가 있는 메서드가 호출되는 경우만 init()가 호출 되는 건가요?
-> @InitBinder를 통해서 WebDataBinder가 넘어오게 되는데요.
WebDataBinder는 데이터 검증기 뿐만 아니라 Type Conversion, 바인딩 제외 등 여러가지 처리를 진행할 수 있습니다.
따라서 매개변수를 바인딩 하는 경우에 대부분 호출된다고 보시면 됩니다.
추가로 컨트롤러에서 모델에 특정 데이터를 담은 경우에도 호출 됩니다.
2. 또 init가 호출될 떄마다 검증기도 새로 생성된다고 했는데 검증기도 객체인데 그 객체를 호출마다 새로 생성하고 리퀘스트 스코프 끝나면 검증기 객체가 자동 삭제되고 다른 호출일 때 또 새로운 검증기 객체가 생성되는 인식이 맞을까요?
-> WebDataBinder는 새로 생성되지만, ValidationItemControllerV2 코드를 잘 보시면 WebDataBinder에 검증기를 등록할 때 스프링을 통해서 주입 받은 검증기를 넣고 있습니다. 따라서 검증기는 같은 검증기를 재사용하게 됩니다. 물론 new ItemValidator()와 같이 코드를 작성하면 계속 검증기를 불필요하게 생성하게 됩니다.
감사합니다.