5.0

스프링 프레임워크 5.0의 새로운 기능 및 향상된 기능

1. JDK 8+9와 Java EE 7 베이스라인

  • 전체 프레임워크 코드베이스를 자바 8 소스코드 레벨을 기반으로 함.
    • 제네릭 타입 유추 등을 통한 가독성 향상.
    • 자바 8 기능에 대한 조건부 지원은 지금 바로 코드에서 확인할 수 있음.
  • 이제 스프링의 해당 모듈에서 Java EE 7 API 레벨이 필요합니다.
    • Servlet 3.1, JMS 2.0, JPA 2.1, Bean Validation 1.1
    • 최근 서버 : 예) Tomcat 8.5+, Jetty 9.3+, WildFly 10+
  • 2016년 7월 기준 JDK 9와의 완벽한 호환성.
    • 스프링 프레임워크 프로젝트는 JDK 9에서 빌드될 수 있음. 테스트 슈트를 통과함.

2. 패키지, 클래스, 메서드 제거

  • mock.staticmock 패키지가 spring-aspects module에서 제거됨.
    • 더 이상 AnnotationDrivenStaticEntityMockingControl를 지원하지 않음.
  • web.view.tiles2 및 orm.hibernate3/hibernate4 패키지는 삭제됨.
    • 최소 요구사항 : Tiles 3, Hibernate 5.
  • 지원 중단 : Portlet, Velocity, JasperReports, XMLBeans, JDO, Guava.
    • 권장사항 : 필요한 경우 스프링 프레임워크 4.3.x를 사용해야 함.
  • 많은 deprecated 클래스와 메서드가 코드베이스에서 제거됨.
    • ecosystem에서 일반적으로 사용되는 메서드에 대해 몇 가지 타협이 이루어짐.

3. 코어 컨테이너 개선

  • JDK 8 이상의 향상된 기능
    • 자바 8 리플렉션 개선을 기반으로 하는 효율적인 메서드 파라미터 접근.
    • 핵심 스프링 인터페이스에서 자바 8 디폴트 메서드의 선택적 선언.
    • JDK 7 Charset과 StandardCharsets의 향상된 기능을 일관되게 사용함.
  • JDK 9 준비
    • 생성자를 통한 일관된 인스턴스 생성(예외처리 수정)
  • 버전 없는 스키마로 간소화된 XML 설정 네임스페이스.
    • 항상 최신 xsd 파일을 비교하여 해결함. deprecated된 기능을 더 이상 지원하지 않음.
    • 버전을 명시하는 선언은 계속 지원되나 최신 스키마에 대해 유효성이 검사됨.
  • 리소스 추상화는 방어적인 getFile 접근을 위한 isFile 지시자를 제공함.

4. 일반적인 웹 개선

  • MediaTypeFactory를  통해 미디어 타입 확인을 위한 통합 지원.
  • 스프링이 제공하는 필터 구현체에서 완전한 서블릿 3.1 시그니처 지원.
  • Protobuf 3.0 지원 (현재 beta 4).

5. 리액티브(Reactive) 프로그래밍 모델

  • non-blocking 방식(semantics)으로 spring-core 모듈의 DataBuffer와 Encoder/Decoder 추상화.
  • JSON(Jackson) 및 XML(JAXB) 지원을 사용하는 spring-web 모듈의 HTTP 메시지 코덱 구현.
  • 새로운 spring-web-reactive 모듈은 서블릿 3.1 컨테이너뿐만이 아니라 Netty와 Undertow와 같은 서블릿 기반이 아닌 런타임에서도 Reactive Steam에 맞춘 @Controller 프로그래밍 모델을 지원함.
  • 클라이언트 사이드에서 리액티브를 지원하는 새로운 WebClient.
  • 자세한 내용은 "웹 리액티브 프레임워크" 를 참조. 

6. 테스트 개선

  • 스프링 TestContext 프레임워크에서 JUnit 5의 Jupiter 프로그래밍 및 확장 모델을 완벽하게 지원함.
    • SpringExtension: 스프링 TextContext 프레임워크의 기존 기능들을 모두 지원하는 JUnit Jupiter의 여러 확장 API를 구현. 이 지원은 @ExtendWith(SpringExtension,class)를 통해 가능함.
    • @SpringJUnitConfig: JUnit Jupiter의 @ExtendWith(SpringExtension,class)와 스프링 TestContext 프레임워크의 @ContextConfiguration을 결합한 애노테이션임.
    • @SpringJUnitWebConfig: JUnit Jupiter의 @ExtendWith(SpringExtension,class)와 스프링 TestContext 프레임워크의 @ContextConfiguration 및 @WebAppConfiguration을 결합한 애노테이션임.
    • @EnabledIf: 제공되는 SpEL 표현식 또는 property placeholder 가 true로 평가되면 애노테이션이 붙은 테스트 클래스 또는 테스트 메서드가 활성화됨을 알림.
    • @DisabledIf: 제공되는 SpEL 표현식 또는 property placeholder 가 true로 평가되면 애노테이션이 붙은 테스트 클래스 또는 테스트 메서드가 비활성화됨을 알림.
  • 스프링 TextContext 프레임워크에서 테스트의 병렬 실행을 지원함. 자세한 내용은 테스트 장의 "병렬 테스트 실행" 섹션을 참조.
  • TestNG, JUnit 5 및 JUnit 4를 지원하는 스프링 TextContext 프레임워크에서 SpringRunner를 통해 테스트 실행 전/후에 콜백을 새로 추가함. (JUnit 4 규칙을 통하지 않음.)
    • TestExecutionListener API 와 TestContextManager에서 새로운 콜백인 beforeTestExecution() 와 afterTestExecution() 가 있음.
  • MockHttpServletRequest는 컨텐츠(즉, 요청 본문)에 접근하기 위한 getContentAsByteArray() 와 getContentAsString() 메서드가 있음.
  • 스프링 MVC 테스트의 print() 와 log() 메서드는 모의 요청에 문자 인코딩이 설정되면 요청 본문을 출력함.
  • 스프링 MVC 테스트의 redirectedUrl() 과 forwardedUrl() 메서드는 변수 확장을 사용하는 URI 템플릿을 지원함.
  • 2.2로 업그레이드된 XMLUnit 지원.