파란하늘의 지식창고
Published 2020. 12. 1. 14:51
What's New in Spring Framework 5.3 Study/Java
반응형

What's New in Spring Framework 5.x

What's New in Spring Framework 5.x의 5.3 버전에 대한 내용을 번역한 글입니다.

spring-projects/spring-framework

 

spring-projects/spring-framework

Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub.

github.com

What's New in Version 5.3

General Core Revision

  • ASM 9.0, Kotlin 1.4로 업그레이드합니다.
  • ReactiveAdapterRegistry에서 RxJava 3을 지원하지만 RxJava 1.x는 deprecated 되었습니다.
  • native image에서 지원되지 않는 기능을 제거하여 GraalVM native 지원을 개선합니다.
  • spring.spel.ignore property로 SpEL 지원을 사용하지 않을 수 있게 합니다.

Core Container

  • Java 14/15의 record class와 유사한 형태의 constructor/accessor binding을 지원합니다.
  • ObjectProvider.ifAvailable/ifUnique는 현재 비활성 범위의 Bean을 명시적으로 무시합니다.
  • PayloadApplicationEvent handling을 편리하게 프로그래밍할 수 있도록 ApplicationListener.forPayload(Consumer) method를 제공합니다.
  • CronExpression에서 Quartz 확장을 지원합니다.
    • day-of-month field는 L을 사용하여 해당 월의 마지막 날을 표현, nL을 사용하여 해당 월의 n일부터 마지막 날까지를 표현, nW를 사용하여 가장 가까운 평일부터 일까지 n을 표현할 수 있습니다.
    • 요일 field는 DDDL을 사용하여 해당 월의 마지막 요일 DDD를 표현하거나 DDD#n을 사용하여 n번째 요일 DDD를 표현할 수 있습니다.

Data Access and Transactions

  • spring-r2dbc support 모듈이 새로 추가되었습니다. core R2DBC support와 reactive R2dbcTransactionManager가 Spring Framework 아래로 이동하였습니다.
  • commit 시 data access exception translation을 추가하기 위해 DataSourceTransactionManager 하위에 JdbcTransaction subclass가 추가되었습니다.
  • Kotlin/Lombok data class와 Java 14/15 record class를 포함하여 constructor 기반의 binding 지원을 위해 DataClassRowMapper가 추가되었습니다.
  • JdbcTemplate에서 queryForStream을 지원합니다. 이는 java.util.stream.Stream에 대해 closeable 한 lazy iteration을 허용합니다.
  • Jpa/HibernateTransactionManagerLocal(Container)EntityManagerFactoryBean에서 EntityManager/Session initializer Configuration이 가능합니다.
  • HibernateJpaVendorAdaptor가 Hibernate ORM 5.2+ 규칙을 default로 노출합니다. (예. EMF vendor interface로 SessionFactory)
  • transaction 정의가 custom label을 선언할 수 있습니다. (custom transaction manager에서 사용)
  • transaction 정의에서 ${...} placeholder로 timeout value 사용을 지원합니다.
  • programmatic registration을 위한 forPayload method, callback 지원 및 adapter classs가 포함된 TransactionlApplicationListener interface를 제공합니다. (@TransactionEventListener anntated method의 대안입니다.)
  • @Transactional suspending function을 지원합니다. (Kotlin Coroutines)

Spring Messaging

  • RSocketClientRSocketRequester를 신규 지원합니다.
    mono wrapper를 사용하지 않거나 초기 connection을 맺지 않아도 RSocketRequester를 객체를 획득할 수 있습니다.
    reconnection 지원을 포함한 request가 있을 경우 connection이 투명하게 확보됩니다.
  • 새로운 LoadbalanceRSocketClient에 대해 RSocketRequester를 지원합니다.
  • metadataPush interaction에 대해 RSocketRequester를 지원합니다.
  • STOMP/WebSocket application을 위한 preservePublishOrder 옵션이 send buffer size 및 time limits와 함께 동작합니다.
  • Kotlin multiplatform serialization을 지원합니다. (현재는 JSON만 지원함)
  • StompBrokerRelayMessageHandler는 non-broker destination message 대신 broker에게 heartbeat를 보내기 위해 Taskscheduler를 구성할 수 있습니다.
    이는 다른 message가 전송되지 않을 때만 heartbeat를 보내는 client에게 도움이 될 수 있습니다.

General Web Revision

  • wildcard pattern을 통해 domain의 dynamic range를 선언하기 위한 allowedOriginPatterns property가 CORS configuration에 신규 추가되었습니다.
  • RequestEntity가 variable와 함께 URITemplates를 지원합니다.
  • advanced customization을 위해 Jackson2ObjectMapperBuilder에서 Consumer<ObjectMapper>가 제공됩니다.
  • initialization 동안 DataBinder가 direct field와 bean property access 사이를 전환할 수 있습니다.
    예를 들어 @ControllerAdvice가 default global 한 direct field access를 구성하며 일부 controller는 @InitBinder method를 통해 bean property access를 local로 override 할 수 있습니다.
  • 관련된 converter와 codec을 포함하여 사용하지 않는 application에 대해 XML support를 비활성화하는 spring.xml.ignore property가 추가되었습니다.

Spring MVC

  • Spring MVC에서 parsed PathPattern으로 효율적인 URL matching을 지원합니다.
    documentation의 "Web Servlet" section의 "URI Patterns" 부분과 "URL Matching with PathPattern in Spring MVC" blog post를 참조하세요.
  • UrlPathHelper가 보다 효율적인 application path의 결정을 위해 HttpServletMapping을 check 합니다.
  • @ControllerAdviceExceptionHandlerExceptionResolver에 설정된 handler mapping과 일치하는 모든 handler type (@Controller 뿐만 아니라 HttpRequestHandler, HandlerFunction 등)의 예외를 처리할 수 있습니다.
  • @ExceptionHandler가 모든 중첩 수준에서 exception 원인을 target으로 지정할 수 있습니다.
  • ForwardedHeaderFilter가 "Forwarded For" header에서 remote address/port를 update 합니다.
  • 대부분의 경우에 DispatcherServlet.properties(lazily parsed 상황에)가 필요하지 않도록 WebMvcConfigurationSupport에 missing bean을 추가하였습니다.
  • Kotlin multiplatform serialization을 지원합니다.(현재는 JSON만 해당)

Spring WebFlux

  • buffer stream을 Flux<Part>로 변환해주는 fully reactive message reader를 제공하는 DefaultPartHttpMessageReader가 새로 추가되었습니다.
  • client에서 remote service로 전달된 Flux<Part>를 write 하기 위한 PartHttpMesssageWriter가 추가되었습니다.
  • Apache Http Components를 위한 WebClient connector가 추가되었습니다.
  • WebClientClientRequestClientHttpRequest와 native request에 대한 access를 제공합니다.
    이는 HTTP library와 관련된 request 별 option을 customizing 하는데 유용합니다.
  • Netty ByteBuf를 구현을 위한 EncoderDecoder를 제공합니다.
  • ForwardedHeaderTransformer가 "Forwarded For" header에서 remote address/port를 update 합니다.
  • @EnableWebFluxWebSocketHandler type의 handler를 지원합니다.
  • WebSocketSessionCloseStatus에 대한 access를 제공합니다.
  • HttpHandler level에서 전체 Webfilter chain를 decorate 하기 위한 WebHttpHandlerBuilder option을 제공합니다.
  • pattern이나 URI variable이 없는 @RequestMapping method에 대해 보다 효율적인 direct path lookup을 제공합니다.
  • client filter 나 onStatus handler을 통한 효율적인 변경을 위해 ClientResponse 성능 최적화 및 mutate() method가 제공됩니다. #24680 참조
  • Kotlin multiplatform serialization을 지원합니다. (현재는 JSON만 해당)

Testing

  • 이제 Spring TestContext Framework는 JUnit Jupiter 5.7, JUnit 4.13.1 및 TestNG 7.3.0을 사용합니다.
  • enclosing class에 대한 test에 관련된 annotation은 이제 Junit Jupiter @Nested test class에 대해 default로 상속됩니다.
    • 이는 잠재적으로 주요 변경 사항이지만 @NestedTestConfiguration annotation, JVM system property 또는 classpath root에 있는 spring.properties file의 항목을 통해 enclosing class로부터 override 하여 되돌릴 수 있습니다
    • 자세한 내용은 Javadoc @NestedTestConfigurationreference menual을 참조하세요.
  • spring.test.constructor.autowire.mode property가 JUnit Platform configuration parameter를 통해 default @TestConstructor autowiring mode(예를 들면 junit-platform.properties file)를 변경하도록 설정할 수 있습니다.
  • @Transactional을 명시적 transaction manager가 test에 사용할 수 있도록 qualifier와 함께 구성되지 않는 한 TransactionManagementConfigurer를 통해 구성된 PlatformTransactionManager가 이제 ApplicationContext에서 bean으로 구성된 어떤 transaction manager보다 우선시 됩니다.
  • 이제 propagation = NOT_SUPPORTED에 대한 기존 지원 외에 @Transactional(profagation = NEVER)을 통해 test-managed transaction을 비활성화할 수 있습니다.
    예를 들면 @Transactional 선언을 composed annotation, superclass 등에서 override 하는 것입니다.
  • MockMvc에 대한 요청 수행을 위한 WebTestClient를 지원합니다. 이를 통해 MockMvc 테스트 및 전체 HTTP 테스트에 동일한 API를 사용할 수 있습니다.
    참조 문서에 업데이트된 test section을 참조하세요.
  • header의 모든 value를 assert 하기 위한 WebTestClient 지원이 향상되었습니다.
  • RestTemplate에 대한 client-side REST test 지원의 Multipart data matcher (문구가 이해가 안 됨. 지원이 추가되었다는 건가...)
  • Spring MVC Test 용 HtmlUnit integration이 file upload parameter를 지원합니다.
  • character encoding과 multiple Content-Language header value에 대한 minor 개선 사항이 MockHttpServletResponse에 있습니다.
  • multiple matcher를 지원하기 위한 MockMVC Kotlin DSL의 major revision이 있습니다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요