/
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 추출을 지원하기 위해 추가됨.

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() 메서드가 추가됨. 

9. Jackson JSON 2와 관련 기능 개선

10. Tiles 3

11. @RequestBody 개선

12. HTTP PATCH 메서드

13. 매핑된 인터셉터에서의 제외 패턴 지원

14. 주입 지점(injection points)과 빈 정의 메서드를 위한 메타 애노테이션 사용

15. JCache 0.5에 대한 초기 지원

16. Joda Time 없이 @DateTimeFormat 지원

17. 글로벌 날짜 / 시간 포맷팅

18. 새로운 테스트 기능

19. 프레임워크 전반의 동시성 개선

20. 새로운 그래들(Gradle) 기반 빌드 및 GitHub로 소스 이동

21. 세련된 자바 SE 7 / 오픈JDK 7 지원