반응형
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.ignoreproperty로 SpEL 지원을 사용하지 않을 수 있게 합니다.
Core Container
- Java 14/15의 record class와 유사한 형태의 constructor/accessor binding을 지원합니다.
ObjectProvider.ifAvailable/ifUnique는 현재 비활성 범위의 Bean을 명시적으로 무시합니다.PayloadApplicationEventhandling을 편리하게 프로그래밍할 수 있도록ApplicationListener.forPayload(Consumer)method를 제공합니다.CronExpression에서 Quartz 확장을 지원합니다.- day-of-month field는
L을 사용하여 해당 월의 마지막 날을 표현,nL을 사용하여 해당 월의 n일부터 마지막 날까지를 표현,nW를 사용하여 가장 가까운 평일부터 일까지 n을 표현할 수 있습니다. - 요일 field는
DDDL을 사용하여 해당 월의 마지막 요일 DDD를 표현하거나DDD#n을 사용하여 n번째 요일 DDD를 표현할 수 있습니다.
- day-of-month field는
Data Access and Transactions
spring-r2dbc support모듈이 새로 추가되었습니다. core R2DBC support와 reactiveR2dbcTransactionManager가 Spring Framework 아래로 이동하였습니다.- commit 시 data access exception translation을 추가하기 위해
DataSourceTransactionManager하위에JdbcTransactionsubclass가 추가되었습니다. - Kotlin/Lombok data class와 Java 14/15 record class를 포함하여 constructor 기반의 binding 지원을 위해
DataClassRowMapper가 추가되었습니다. - JdbcTemplate에서
queryForStream을 지원합니다. 이는java.util.stream.Stream에 대해 closeable 한 lazy iteration을 허용합니다. Jpa/HibernateTransactionManager와Local(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을 위한
forPayloadmethod, callback 지원 및 adapter classs가 포함된TransactionlApplicationListenerinterface를 제공합니다. (@TransactionEventListener anntated method의 대안입니다.) @Transactionalsuspending function을 지원합니다. (Kotlin Coroutines)
Spring Messaging
RSocketClient가RSocketRequester를 신규 지원합니다.
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를 선언하기 위한
allowedOriginPatternsproperty가 CORS configuration에 신규 추가되었습니다. RequestEntity가 variable와 함께 URITemplates를 지원합니다.- advanced customization을 위해
Jackson2ObjectMapperBuilder에서Consumer<ObjectMapper>가 제공됩니다. - initialization 동안
DataBinder가 direct field와 bean property access 사이를 전환할 수 있습니다.
예를 들어@ControllerAdvice가 default global 한 direct field access를 구성하며 일부 controller는@InitBindermethod를 통해 bean property access를 local로 override 할 수 있습니다. - 관련된 converter와 codec을 포함하여 사용하지 않는 application에 대해 XML support를 비활성화하는
spring.xml.ignoreproperty가 추가되었습니다.
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 합니다.@ControllerAdvice가ExceptionHandlerExceptionResolver에 설정된 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를 위한
WebClientconnector가 추가되었습니다. WebClient와ClientRequest는ClientHttpRequest와 native request에 대한 access를 제공합니다.
이는 HTTP library와 관련된 request 별 option을 customizing 하는데 유용합니다.- Netty
ByteBuf를 구현을 위한Encoder와Decoder를 제공합니다. ForwardedHeaderTransformer가 "Forwarded For" header에서 remote address/port를 update 합니다.@EnableWebFlux가WebSocketHandlertype의 handler를 지원합니다.WebSocketSession이CloseStatus에 대한 access를 제공합니다.HttpHandlerlevel에서 전체Webfilterchain를 decorate 하기 위한WebHttpHandlerBuilderoption을 제공합니다.- pattern이나 URI variable이 없는
@RequestMappingmethod에 대해 보다 효율적인 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로 상속됩니다.
- 이는 잠재적으로 주요 변경 사항이지만
@NestedTestConfigurationannotation, JVM system property 또는 classpath root에 있는spring.propertiesfile의 항목을 통해 enclosing class로부터 override 하여 되돌릴 수 있습니다 - 자세한 내용은 Javadoc @NestedTestConfiguration과 reference menual을 참조하세요.
- 이는 잠재적으로 주요 변경 사항이지만
spring.test.constructor.autowire.modeproperty가 JUnit Platform configuration parameter를 통해 default@TestConstructorautowiring mode(예를 들면junit-platform.propertiesfile)를 변경하도록 설정할 수 있습니다.@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-Languageheader value에 대한 minor 개선 사항이MockHttpServletResponse에 있습니다. - multiple matcher를 지원하기 위한 MockMVC Kotlin DSL의 major revision이 있습니다.
반응형
'Study > Java' 카테고리의 다른 글
| spring boot에서 webjars 사용하기 (0) | 2021.03.23 |
|---|---|
| JDK 16 New Features (0) | 2021.03.18 |
| [troubleshooting] org.apache.maven.plugin.MojoExecutionException: Input length = 1 에러 확인 방법 (0) | 2021.02.25 |
| Spring Boot Logging (0) | 2021.01.04 |
| Upgrading to Spring Framework 5.3 (0) | 2020.12.01 |
| Spring Boot Config Data Migration Guide (1) | 2020.11.18 |
| Spring Boot 2.4 Release Notes (0) | 2020.11.14 |
| Spring Boot @ConditionalOnBean 조건 사용 시 주의해야할 점 (0) | 2020.10.22 |
| JDK 15 New Features (0) | 2020.10.13 |
| STS (Eclipse)에서 Language Server 동작 비활성화 하기 (0) | 2020.10.05 |