파란하늘의 지식창고
Published 2022. 11. 30. 01:28
What's New in Spring Framework 6.x Study/Java
반응형

https://github.com/spring-projects/spring-framework/wiki/What%27s-New-in-Spring-Framework-6.x

What's New in Version 6.2

156 revision 기준으로 작성됨

Core Container

  • core container의 관대한 locking; 23501 참조
  • singleton availability에 대한 callback; 21362 참조
  • singleton pre-instantiation 전에 bean factory initionalization을 위한 callback; 32836 참조
  • local root directory 및 jar caching을 통한 multi scan operation으로 component scanning 속도 향상; 21190 참조
  • @Bean(bootstrap=BACKGROUND) 를 통해 특정 bean의 background initialization; 1341019487 참조
  • parameter name (또는 @Qualifier value)이 bean name과 일치할 때 빠른 shortcut autowiring; 2812217677 참조
  • nested/bounded/unresolvable type variables에 대한 일관된 generic type matching; 30079, 2290220727 참조
  • @Primary 의 동반자로 @Fallback 을 포함하는 Fallback bean 정의, ; 26241 참조
  • defaultCandidate=false flag를 기반으로 하는 qualifier 적용 bean 정의; 26528 참조
  • placeholder property에서 prefix 및 separator escape 지원; 9628 참조
  • 간단한 30s 형식을 포함하여 @DurationFormant 으로 다양한 스타일의 구문 parsing/printing Duration 지원; 30396 참조
  • 수정된 lifecycle phase 및 default timeout; 32152 참조
  • 특정 종료 단계에 대한 개별 timeout; 32985 참조
  • TaskScheduler 변경 간 일관된 TaskDecorator 지원; 23755 참조
  • TaskScheduler 변경 간 일관된 ErrorHandler 지원; 32460 참조
  • TaskScheduledTask 에 새로운 execution metadata를 사용할 수 있음; 24560 참조,
  • SimpleAsyncTaskScheduler 는 hand-off trigger와 고정 지연 작업을 위한 별도의 내부의 내부 executor를 관리함; 33408 참조

Ahead of Time (AOT)

  • @Reflective 를 사용한 Reflection hint는 @ReflectiveScan 을 사용하여 임의의 type을 추가할 수 있음; 33132 참조.
  • Reflection hint는 @RegisterReflection 을 사용하여 장식적으로(decoratively) 제공할 수 있음; 29194 참조.
  • GeneratedFiles는 특히 file이 이미 존재하는 경우 file registration에 대한 더 많은 제어 기능을 제공함; 31331 참조.
  • factory method 바로가기 호출을 위한 BeanInstanceSupplier 최적화; 32834 참조.
  • application ahead-of-time process가 실패할 경우 더 많은 context를 제공; 32777 참조.

Spring Expression Language (SpEL)

  • SpEL의 property 탐색 및 indexing 지원에 대한 documentation 전체 개정
  • SpEL expression에서 string과 object로 indexing 하기 위한 공식 documentation
  • 새로운 IndexAccessorCompilableIndexAccessor SPI와 해당 SPI의 built-in ReflectiveIndexAccessor 구현을 통해 custom structure로 indexing하는 것을 위한 first-class 지원; related documentation 참조
  • array, collection, string, map, object, 및 custom structures에 대한 safe 탐색 지원; related documentation 참조
  • varargs를 사용하는 constructor 및 method 호출 뿐만 아니라 Integer 를 사용하여 array 및 list로 index를 지정하는 expression에 대한 compile 지원 개선
  • 이제 SpEL expression을 compile 할 때 가능할 때마다 public interface 또는 public superclass를 통해 method가 호출됨
  • SpEL compiler에 의해 생성된 class name은 이제 org.springframework.expression.spel.generated.CompiledExpression##### form을 취함, 여기서 ##### 은 0으로 채워진 counter.

Data Access and Transactions

  • @EnableTransactionManagementrollbackOn attribute를 포함하여 구성가능한 default rollback rule; 23473 참조

  • default transaction manager 선택에 대한 hint로 사용되는 Type-level @Qualifier annotation; 24291 참조

  • TransactionSynchronization 에 대한 savepoint callback; 30509 참조

  • JPA 3.2에 대한 초기 지원; 31157 참조

  • quoted SQL identifier에 대한 backtick 지원; 3194432285 참조

  • EmbeddedDatabaseBuilder 를 통한 connection URL configuration; 21160 참조

  • JdbcClientResultQuerySpecoptionalValue() method를 제공; 33560 참조.

    Web Applications

  • RFC-7807 response 차단; 31822 참조

  • 새로운 SmartHttpMessageConverter contract; 33118 참조.

  • Jackson을 통한 YAML web 지원; 32345 참조

  • webjars-locator-lite 를 통한 효율적인 webjar version resolution; 27619 참조

  • router function에 대한 최적화된 request predicate execution; 32245 참조

  • UriComponentsBuilder 등을 위한 새로운 URL parser 구현; 32513 참조

  • ResponseEntityExceptionHandler 의 content negotiation 및 view rendering 지원; 31936reference documentation 참조

  • FormHttpMessageConverter 는 이제 single-value map을 지원; 32826 참조

  • RestClient 에서 Request attributes 지원; 32027 참조.

  • Protobuf 4.x 지원; 33011 참조.

  • reactive server를 위한 Partitioned cookies 지원; see 31454 and details on CHIPS.

  • HTTP request headers에서 @ModelAttribute controller method arguments로 Data binding 지원; 32676 참조.

  • Freemarker에 대한 Servlet 지원이 복원됨; 30186 참조.

  • CacheControl 은 이제 변경불가함; 33366 참조.

  • ResponseBodyEmitter는 이제 multiple state listeners를 등록할 수 있어 application이 streaming sessions에 대한 ad hoc keep alive mechanism을 유지하는 경우에 유용함; 33356 참조.

  • 이제 WebMvc functional endpoint용 ServerResponse 를 통해 data stream을 전송할 수 있는 방법이 더 많아졌음. server Send Event는 이미 지원되었지만 이제 다른 streaming protocol을 지원할 수 있음; 32710 참조.

    Messaging Applications

  • JMS DefaultMessageListenerContainer 에 대한 first-class virtual thread 지원; 32252 참조

  • JMS DefaultMessageListenerContainer 는 수정된 idleReceivesPerTaskLimit semantic을 기반으로 default executor를 사용하여 scale up 및 down; 32260 참조

Testing

  • @TestBean, @MockitoBean, 및 @MockitoSpyBean 을 통한 테스트에서 bean overriding을 위한 first-class mechanism; related documentation 참조
  • 이제 테스트의 ApplicationContext 내에서 dynamic properties를 등록할 수 있음; related documentation 참조
    • DynamicPropertyRegistry 는 이제 테스트의 ApplicationContext 에 singleton bean으로 등록되어 @Configuration class 및 @Bean method에 inject 될 수 있음
    • 이제 @DynamicPropertySource@Bean method에 선택적으로 적용하여 해당 bean이 초기화 되어야 함을 알릴 수 있음
  • Spring의 Servlet API mock에서 Servlet 6.1 지원 (Servlet 6.0 호환성을 유지하면서); 31159 참조
  • MockMVC에 대한 AssertJ 지원; 21178 참조
  • MockMVC에 대한 HtmlUnit 3.x/4.x 지원; 30392 참조
  • 향상된 JSONPath 지원; 3165131653 참조
  • WebMvc.fn에 대한 테스트 지원; 30477 참조

What's New in Version 6.1

106 revision 기준으로 작성됨

Core Container

  • virtual threads 및 JDK 21와 전반적으로 호환됨.
  • virtual thread에 대한 Configuration option: 전용 VirtualThreadTaskExecutorSimpleAsyncTaskExecutor의 virtual threads mode, 그리고 new-thread-per-task strategy 와 virtual threads mode가 있는 유사한 SimpleAsyncTaskScheduler가 있음.
  • JVM checkpoint restore을 위한 Project CRaC와의 Lifecycle 통합(관련 문서 참조).
  • Lifecycle 통합 pause/resume 기능ThreadPoolTaskExecutorThreadPoolTaskScheduler , SimpleAsyncTaskScheduler 에 대한 parallel graceful shutdown for .
  • Async/reactive destroy method (예: R2DBC에서 ConnectionFactory); 26691 참조.
  • Async/reactive cacheable method, Cache interface 및 CaffeineCacheManager 의 해당 지원 포함; 17559 and 17920 참조.
  • Reactive @Scheduled methods (Kotlin coroutines 포함); 22924 참조.
  • @Scheduled method에 대한 특정 대상 scheduler 선택; 20818 참조.
  • 일회성 task에 대한 @Scheduled method (초기 지연만 포함); 31211 참조.
  • @Scheduled method의 Observation instrumentation; 29883 참조.
  • Spring Framework는 @Async 또는 @EventListener annotated method에 대한 observation을 즉시 생성하지는 않지만 해당 method의 실행에 대한 context (예: 현재 trace id가 있는 MDC logging)를 전파하는데 도움이 됨. 새로운 ContextPropagatingTaskDecorator , 관련 참조 문서 sectionissue 31130 참조.
  • programming 방식 validator 구현을 위한 Validator factory method; 29890 참조.
  • flexible programming 방식으로 사용할 수 있도록 ErrorsErrors.failOnError method를 반환하는 Validator.validateObject(Object); 19877 참조.
  • MethodValidationInterceptorMessageSource resolvable code와 cascade violation이 있는 @Valid argument에 대한 Errors instances에 맞게 조정된 violation이 있는 ConstraintViolationException 의 subclass인 MethodValidationException 를 throw 함. 29825, 및 umbrella issue 30645 참조.
  • @PropertySource 에서 resource patterns 지원; 21325 참조.
  • BeanWrapperDirectFieldAccessor 에서 IterableMultiValueMap binding 지원; 90726297 참조.
  • InstantDuration parsing 개선(Spring Boot와 일치); 22013 참조.
  • SpEL 표현식에서 property/field/variable name에 A-Z 이외ㅡ이 문자를 지원; 30580 참조.
  • MethodHandle 을 SpEL function으로 등록하는 기능 지원 (관련 문서 참조).
  • 이제 Spring AOP 가 Coroutine을 지원함; 22462 참조.

Data Access and Transactions

  • transaction manager에 의해 trigger 되는 before/afterBegin, before/afterCommit 및 before/afterRollback callback이 있는 일반적인 TransactionExecutionListener contract (thread-bound 및 reactive transaction 용); 27479 참조.
  • @TransactionalEventListenerTransactionalApplicationListener 는 async multicaster 설정과 무관하게 항상 original thread에서 실행됨; 30244 참조.
  • @TransactionalEventListenerTransactionalApplicationListenerApplicationEvent 가 transaction context를 event source로 하여 publish 될 때 reactive transaction에 참여할 수 있음; 27515 참조.
  • 실패한 CompletableFuture 는 async transactional method애 대한 rollback을 trigger 함; 30018 참조.
  • DataAccessUtilsjava.util.Optional return type으로 다양한 optionalResult methods를 제공함; 27735 참조.
  • 새로운 JdbcClient 는 flexible parameter option과 flexible result retrieval option을 사용하여 JdbcTemplateNamedParameterJdbcTemplate 위에 query/update 문을 위한 통합된 facade를 제공; 30931 참조.
  • JdbcTemplate / NamedParameterJdbcTemplateJdbcClient 와 함께 사용하기 위한 SimplePropertyRowMapperSimplePropertySqlParameterSource strategy는 result object 및 named parameter holder에 대한 flexible constructor/property/field mapping을 제공함; 26594 참조.
  • SQLExceptionSubclassTranslator 는 overriding customTranslator 로 구성할 수 있음; 24634 참조.
  • The R2DBC DatabaseClient 는 parameter value의 사전 구성된 map을 위한 bindValues(Map) 과 record component를 기반으로 하는 parameter object를 위한 bindProperties(Object) 를 제공함, 27282 참조.
  • The R2DBC DatabaseClient 는 plain database column value에 대한 mapValue(Class) 와 bean properties 또는 record component에 기반한 result object에 대한 mapProperties(Class) 를 제공함; 26021 참조.
  • R2DBC에서도 BeanPropertyRowMapperDataClassRowMapper 를 사용할 수 있음; 30530 참조.
  • HibernateJpaDialect 를 사용하는 JpaTransactionManager 는 가능한 경우 Hibernate commit/rollback exception을 repository operation에 대한 persistence exception translation에서 던져진 exception hierarchy에 맞춰 가능한 경우 DataAccessException subclass (예: CannotAcquireLockException ) 로 변환함. 주요 동기는 31274 참조: PostgreSQL serialization failures.

Web Applications

  • 이제 Spring MVC와 WebFlux는 @Constraint annotations이 있는 controller method parameter에 대한 method validation을 기본으로 지원함.
    즉, AOP proxy를 통해 method validation을 활성화하기 위해 controller class level에서 @Validated 가 더 이상 필요하지 않음.
    기본 제공 method validation은 model attribute 및 request body argument에 대한 기존 argument validation 위에 계층화됨.
    double validation으로 사례 방지와 같이 두 가지가 더욱 긴밀하게 통합되고 조정됨.
    migration에 대한 자세한 내용은 Upgrading to 6.1 및 모든 관련 task 및 feedback은 umbrella issue 30645 를 참조.
  • 이제 object의 collections, arrays, 또는 maps에서 method validation이 지원됨.
  • 새로운 기본 제공 method validation에 의해 발생하는 HandlerMethodValidationException 은 controller method parameter type (예: @RequestParameter, @PathVariable 등)에 따라 validation error를 처리하기 위해 Visitor API를 노출함.
  • MethodValidationInterceptorMonoFlux method parameters의 validation을 지원함, 20781 참조.
  • Spring MVC는 matching handler가 없는 경우 기본적으로 NoHandlerFoundException 을 발생시키고 matching static resource가 없는 경우 ResponseStatusException(NOT_FOUND) 을 발생시키며 또한 RFC 7807 response를 포함하여 404 error를 기본적으로 일관되게 처리하는 것을 목표로 처리함. 29491 참조.
  • ErrorResponse 를 사용하면 MessageSource 를 통해 ProblemDetailcustomization 하고 builder를 통해 custom ProblemDetail 을 사용할 수 있음.
  • Spring MVC는 error를 처리하고 error response를 rendering 하기 전에 Servlet response buffer를 재설정함.
  • 이제 DataBinder 는 argument value가 NameResolver 를 통해 조회되는 constructor binding 을 지원하며 (예: HTTP request parameters map), 이러한 조회는 @BindParam annotation을 통해 custom 할 수 있다.
    또한 constructor parameter를 초기화하는데 필요한 constructor 호출을 통해 중첩된 object structure도 지원한다.
    이 기능은 Spring MVC 및 WebFlux의 data binding에 통합되어 있으며, 예상되는 parameter만 data binding 할 수 있는 더 안전한 옵션을 제공한다. (자세한 내용은 Model Design 참조.
    이제 Spring MVC 및 WebFlux는 nested objects constructor를 포함하여 constructor를 통한 data binding을 지원한다.
  • WebFlux는 VirtualThreadTaskExecutor 와 같은 다른 Executor 에서 synchronous signature가 있는 controller method의 실행을 차단하는 옵션을 제공한다, 참조 문서의 Blocking Execution 을 참조.
  • 이제 SseEmitter 는 SSE format에 따라 newline으로 format data를 지정.
  • WebClient 와 유사한 API를 제공하지만 RestTemplate 과 infrastructure를 공유하는 새로운 synchronous HTTP client인 RestClient 가 추가됨. 29552 참조.
  • RestTemplateRestClient 와 함께 사용하기 위한 Jetty 기반 ClientHttpRequestFactory ; 30564 참조.
  • RestTemplateRestClient 와 함께 사용하기 위한 JDK HttpClient 기반 ClientHttpRequestFactory ; 30478 참조.
  • RestTemplateRestClient 와 함께 사용하기 위한 Reactor Netty 기반 ClientHttpRequestFactory ; 30835 참조.
  • 다양한 ClientHttpRequestFactory 구현에서 buffering 개선; 30557 참조.
  • reactive WebClient 를 위한 기존 adapter에 더해 새로운 RestClientRestTemplateHTTP Interface client 내장 adapter 제공.
  • HTTP Interface client는 input method parameter로 MultipartFile 을 지원함.
  • HTTP Interface client는 기본 구성 대신 사용할 수 있는 input method parameter (예: baseURL을 동적으로 변경해야 하는 경우)로 UriBuilderFactory 를 지원.
  • HTTP interface method에 사용되는 @HttpExchange annotation은 이제 @RequestMapping 의 대안으로 Spring MVC 및 WebFlux에서 server side handling을 위해 지원됨, 자세한 내용과 지침은 @HttpExchange 를 참조.
  • RestTemplateRestClient 에서 함께 사용하기 위한 Reactor Netty 기반 ClientHttpRequestFactoryWebClient 와 함께 사용하기 위한 ClientHttpConnector 에 JVM checkpoint 복원 지원이 추가됨; 31280, 3128131180 참조.
  • General Coroutine은 WebFlux의 revision을 지원하며, 여기에는 CoWebFilterCoroutineContext 전파, filter 가 있는 coRouter DSL의 CoroutineContext 전파, coRouter DSL의 새로운 context function, WebFlux의 suspending function이 있는 @ModelAttribute 지원awaitSingle()Mono variant를 일관되게 사용하는 것 이 포함됨.

Messaging Applications

  • STOMP messaging은 특정 client로부터 받은 message를 순서대로 처리하기 위한 새로운 preserveReceiveOrder config option을 지원함.
    이 option은 clients에 publish 된 message에 대한 기존의 preservePublishOrder flag에 추가됨.
    참조 문서의 Order of Messages section 참조.
  • RSocket interface method에 사용되는 @RSocketExchange annotation은 이제 응답자 측 처리를 위해 @MessageMapping 대신 지원됨, 자세한 내용과 지침은 @RSocketExchange 참조.
  • messaging handler method에 대해서도 interface parameter annotations 이 감지됨 (web handler method와 유사).
  • WebSocket messaging의 The SpEL 기반 selector header 지원은 이제 default로 비활성화되어 있으며 명시적으로 사용하도록 설정해야 함. migration에 대한 자세한 내용은 30550Upgrading to 6.1 참조.
  • JMS에 대한 Observability 지원. 이제 JmsTemplate 으로 publish 할 때와 MessageListener 또는 @JmsListener 으로 message를 publish 할 때 observation을 생성함. 참조 문서 section 과 issue 30335 참조.

Testing

  • ApplicationContext failure threshold 지원: 기본 값은 1이지만 system property를 통해 구성할 수 있는 failure threshold를 기반으로 TestContext frameworke에서 실패한 ApplicationContext 를 로드하려는 시도가 반복되지 않도록 방지함 (관련 문서 참조).
  • @RecordApplicationEvents 로 asynchronous event 기록 지원. 30020 참조.
    • main test thread 이외의 thread에서 event를 기록함.
    • 별도의 thread에서 event를 assert 함 – 예: awaitility 사용.
  • MockMvc는 init parameter를 사용하여 filter를 초기화하고 특정 dispatch type에 mapping 할 수 있도록 지원함.
  • MockMvcWebTestClient 는 이제 test 간에 다양한 사용자 ID를 허용할 수 있는 RequestPostProcessor hook을 지원함. issue 31298 참조.
  • MockRestServiceServerRestTemplate 외에 새로운 RestClient 를 지원함.
  • MockHttpServletResponse.setCharacterEncoding() 에서 null 을 지원함. 30341 참조.

What's New in Version 6.0

JDK 17+ and Jakarta EE 9+ Baseline

  • 이제 Java 17 source code level을 기반으로 하는 전체 framework codebase
  • Servlet, JPA 등을 위한 javax 에서 jakarta namespace로 migration.
  • Jakarta EE 9 및 Jakarta EE 10 API와의 runtime 호환성.
  • 최신 web server와 호환 : Tomcat 10.1, Jetty 11, Undertow 2.3.
  • virtual threads 와의 초기 호환성(in preview as of JDK 19).

General Core Revision

Core Container

  • default로 java.beans.Introspector 가 없는 basic bean property 결정.
  • GenericApplicationContext (refreshForAotProcessing )에서 AOT 처리 지원.
  • pre-resolved constructor와 factory method를 기반으로 한 bean definition transformation.
  • AOP proxy alc configuration class에 대한 early proxy class determination을 지원.
  • PathMatchingResourcePatternResolver 는 scan을 위해 NIO 및 module path API를 사용하여 각각 GraalVM native image 및 Java module path 내에서 classpath scanning을 지원함.
  • DefaultFormattingConversionService 는 ISO-based default java.timetype parsing을 지원.

Data Access and Transactions

  • predetermining JPA managed type 지원 (for inclusion in AOT processing).
  • Hibernate ORM 6.1에 대한 JPA 지원(Hibernate ORM 5.6과의 호환성 유지).
  • R2DBC 1.0으로 upgrade(R2DBC transaction definitions 포함).
  • JDBC, R2DBC, JPA 및 Hibernate 간 data access exception translation이 조정(aligned)됨
  • JCA CCI 지원 제거.

Spring Messaging

  • @RSocketExchange service interface를 기반으로 하는 RSocket interface client.
  • Netty 5 alpha를 기반으로 하는 Reactor Netty 2를 조기 지원.
  • Jakarta WebSocket 2.1 및 standard WebSocket protocol upgrade mechanism을 지원.

General Web Revision

  • @HttpExchangeservice interfaces를 기반으로 하는 HTTP interface client.
  • RFC 7807 problem details 지원.
  • 통합 HTTP status code handling.
  • Jackson 2.14 지원.
  • (Servlet 5.0과 runtime 호환성을 유지하면서) Servlet 6.0으로 조정.

Spring MVC

  • default로 사용되는 PathPatternParser (PathMatcher를 선택하는 기능 포함).
  • outdated Tiles 및 FreeMarker JSP 지원 제거.

Spring WebFlux

  • multipart form uploads를 streaming 하는 새로운 PartEvent API (clientserver 모두).
  • WebFlux exceptions을 customize 하고 RFC 7807 error responses를 rendering 하는 새로운 ResponseEntityExceptionHandler
  • non-streaming media type에 대한 Flux return value(write 하기 전에는 더 이상 List 로 수집되지 않음).
  • Netty 5 alpha를 기반으로 하는 Reactor Netty 2 조기 지원.
  • WebClient 와 통합된 JDK HttpClient

Observability

Spring Framework의 여러 부분에서 Micrometer Observation을 사용한 Direct Observability instrumentation.
spring-web module은 이제 compile dependency로 io.micrometer:micrometer-observation:1.10+ 가 필요합니다..

  • RestTemplateWebClient 는 HTTP client request observation을 생성하도록 계측됩니다.
  • Spring MVC는 새로운 org.springframework.web.filter.ServerHttpObservationFilter 를 사용하여 HTTP server observation을 위해 계측될 수 있습니다..
  • Spring WebFlux는 새로운 org.springframework.web.filter.reactive.ServerHttpObservationFilter 를 사용하여 HTTP server observation을 위해 계측될 수 있습니다.
  • Flux 를 위한 Micrometer Context Propagation과 통합 및 controller method의 Mono return value.

Testing

  • JVM 또는 GraalVM native image 내에서 AOT-processed application context testing을 지원.
  • HtmlUnit 2.64+ request parameter handling과 통합.
  • Servlet mocks(MockHttpServletRequest , MockHttpSession )은 이제 Servlet API 6.0 기반으로 합니다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

도움이 되었다면 광고를 클릭해주세요