/
3.2
3.2
스프링 프레임워크 3.2의 새로운 기능 및 향상된 기능
1. 서블릿 3 기반 비동기 요청 처리 지원
스프링 MVC 프로그래밍 모델은 이제 명쾌한 서블릿 3 비동기를 지원함.
@RequestMapping 메서드는 아래 중 하나를 리턴할 수 있음.
- java.util.concurrent.Callable는 스프링 MVC 내에서 task executor에 의해 관리되는 별도의 스레드에서 처리를 완료함.
- org.springframework.web.context.request.async.DeferredResult는 스프링 MVC에 알려지지 않은 스레드(예. 일부 외부 이벤트에 대한 응답 - JMS, AMQP 등)를 나중에 처리를 완료함.
- org.springframework.web.context.request.async.AsyncTask는 Callable을 래핑(wrap)하고, 타임아웃 값이나 task executor 사용여부를 커스터마이즈 함.
2. 스프링 MVC 테스트 프레임워크
- 스프링 MVC 애플리케이션을 테스트하기 위해 서블릿 컨테이너 없이 fluent API를 테스트할 수 있도록 지원함.
- [작성중] Server-side tests involve use of the DispatcherServlet while client-side REST tests rely on the RestTemplate.
- 섹션 11.3.6, “스프링 MVC 테스트 프레임워크” 참고.
3. 콘텐츠 네비게이션 개선
ContentNegotiationStrategy는 이제 들어오는 요청으로부터 요청 미디어 타입 문제를 해결하기 위해 사용할 수 있음. 사용 가능한 구현체는 파일확장자, 쿼리 파라미터, 'Accept' 헤더 또는 고정된 content type에 기반을 두고 있음. 이전에는 ContentNegotiatingViewResolver에서만 사용할 수 있었지만 지금은 전반에 걸쳐 사용할 수 있음.
ContentNegotiationManager는 콘텐츠 네비게이션 옵션을 설정할 때 사용하는 중심이 되는 클래스임.
ContentNegotiationManager의 도입은 들어오는 요청에 대해 선택적인 접미사(suffix) 패턴 매칭을 할 수 있게 한다.
4. @ControllerAdvice 애노테이션
- [작성중] Classes annotated with @ControllerAdvice can contain @ExceptionHandler, @InitBinder, and @ModelAttribute methods and those will apply to @RequestMapping methods across controller hierarchies as opposed to the controller hierarchy within which they are declared.
- @ControllerAdvice 애노테이션이 붙은 클래스는 @ExceptionHandler, @InitBinder, 그리고 @ModelAttribute 메서드를 포함할 수 있음.
- @ControllerAdvice는 클래스패스 탐색(scanning)을 통해 자동으로 구현 클래스를 감지(detected)할 수 있는 컴포넌트 애노테이션임.
5. Matrix 변수 (Matrix URIs 참고)
새로운 @MatrixVariable 애노테이션은 요청 URI로부터 matrix variables 추출을 지원하기 위해 추가됨.
- "Matrix Variables" 참고.
6. 코드 기반의 서블릿 3+ 컨테이너 초기화를 위한 추상 기본 클래스
- WebApplicationInitializer 인터페이스의 추상 기본 클래스 구현은 DispatcherServlet 등록 및 필터 매핑을 코드 기반으로 간단하게 하기 위해 제공됨.
- 자바 기반의 스프링 설정에 사용할 수 있는 새로운 클래스는 AbstractDispatcherServletInitializer 및 하위 클래스인 AbstractAnnotationConfigDispatcherServletInitializer 임.
- 섹션 17.14, “코드 기반의 서블릿 컨테이너 초기화” 참고.
7. ResponseEntityExceptionHandler 클래스
- 표준 스프링 MVC 예외를 처리하기 위해 @ExceptionHandler 메서드와 함께 사용하는 편리한 기본 클래스임.
- 커스터마이징을 허용하고, HTTP 메시지 컨버터와 함께 응답(response)을 작성하는 ResponseEntity를 리턴함.
- 이 클래스는 ModelAndView를 리턴하고 동일 작업을 수행하는 DefaultHandlerExceptionResolver의 대안임.
- 기본 서블릿 컨테이너 오류 페이지를 커스터마이징하는 정보를 담고 있는 섹션 17.11, “Handling exceptions” 참고
8. RestTemplate 및 @RequestBody 인자(arguments)에서의 제너릭 타입 지원
- RestTemplate은 제너릭 타입의 HTTP 응답(response)를 읽을 수 있음. (예. List<Account>)
- 캡쳐 및 제너릭 타입 정보를 전달할 수 있는 ParameterizedTypeReference<T> 클래스를 파라미터로 받을 수 있는 3개의 새로운 exchange() 메서드가 추가됨.