반응형
What's New in Spring Framework 5.x
What's New in Spring Framework 5.x의 5.3 버전에 대한 내용을 번역한 글입니다.
spring-projects/spring-framework
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를 표현할 수 있습니다.
- day-of-month field는
Data Access and Transactions
spring-r2dbc support
모듈이 새로 추가되었습니다. core R2DBC support와 reactiveR2dbcTransactionManager
가 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/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을 위한
forPayload
method, callback 지원 및 adapter classs가 포함된TransactionlApplicationListener
interface를 제공합니다. (@TransactionEventListener anntated method의 대안입니다.) @Transactional
suspending 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를 선언하기 위한
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 합니다.@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를 위한
WebClient
connector가 추가되었습니다. WebClient
와ClientRequest
는ClientHttpRequest
와 native request에 대한 access를 제공합니다.
이는 HTTP library와 관련된 request 별 option을 customizing 하는데 유용합니다.- Netty
ByteBuf
를 구현을 위한Encoder
와Decoder
를 제공합니다. ForwardedHeaderTransformer
가 "Forwarded For" header에서 remote address/port를 update 합니다.@EnableWebFlux
가WebSocketHandler
type의 handler를 지원합니다.WebSocketSession
이CloseStatus
에 대한 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 @NestedTestConfiguration과 reference 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이 있습니다.
반응형
'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 (0) | 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 |