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 지원.