오늘 오후 네 시에 스터디가 있어서 오랜만에 13장을 다시 정리해봤습니다. 그 중 몇 개만 정리해둡니다.

MultiActionController 사용 방법은 두 가지
- 상속
- 위임

WebApplicationContext가 관리하는 빈
- 컨트롤러(controller)
- 핸들러 맵핑(handler mappings)
- 뷰 리졸버(view resolver)
- 로케일 리졸버(locale resolver)
- 테마 리졸버(theme resolver)
- 멀티파트 파일 리졸버(multipart file resolver)
- 예외 처리 리졸버(Handler exception resolver)

애노테이션 기반 컨트롤러 설정시 필요한 빈(자동 등록해줌)
- DefaultAnnotaionHandlerMapping
- AnnotationMethodHandlerAdapter

@RequestMapping 사용 방법
- 클래스 레벨
- 메소드 레벨(MAC와 비슷한 효과)
- 클래스 + 메소드 레벨 혼합(클레스 레벨에 Ant 패턴 사용해서 거르고, 메소드 레벨로 세부적으로.)

요청 처리 메소드 인자
- Servlet API(Session 사용시 Thread-safety 문제가 생기면, AnnotationMethodHandlerAdapter의 synchronizeOnSession 속성을 true로 설정.)
- WebRequest, NativeWebRequest
- Locale
- InputStream/Reader, OutputStream/Writer
- @RequestParam
- Map, Model, ModelMap
- Command/form objects
- Errors/BindingResult
- SessionStatus

요청 처리 메소드 반환 타입
- ModelAndView
- Model (뷰 이름은 CoC 사용)
- Map (위와 동일)
- View (모델은 커맨드 객체와 @ModelAttribute를 사용한 메소드가 반환하는 객체)
- String (위와 동일)
- void (응답을 response 객체를 사용해서 직접 처리하거나, CoC 사용)
- Other return type (해당 객체를 model attribute로 뷰에서 사용가능)

@RequestParam
- 요청 매개변수 바인딩

@ModelAttribute
- 메서드 매개변수 레벨: 모델 속성을 특정 메서드 매개변수로 맵핑할 때 사용.
- 메서드 레벨: 화면에서 사용할 implicite object를 제공할 때 사용.

@SessionAttributes
- @ModelAttribute의 이름 목록을 지니고 있다. 해당 모델 객체들을 세션에 저장하여 여러 요청에서 공통으로 사용.

@InitBinder
- 커스텀 프로퍼티 에디터 등록.