⭐ New Features
- Cache method annotations in
MethodParameterandAnnotatedMethod#36307 - Consistently support
@Lazyas a meta-annotation at arbitrary depths #36306 - Consistently support
@Validatedas a meta-annotation at arbitrary depths #36305 - Let developers disable default registrations in HttpMessageConverters #36303
- Log which HandlerInterceptor threw the exception #36281
- Improve performance of hashcode calculations for request mappings #36279
- Improve performance of HandlerMethod bean lookup #36278
- Improve performance of version mapping #36276
- Improve performance of single pattern request mappings #36275
- Improve performance of validation groups determination #36274
- Add
setPackagesToScanconfiguration method toLocalEntityManagerFactoryBean#36270 - Remove outdated GraalVM substitution #36257
- Introduce
beforeRetrycallback withRetryStateargument #36245 - Optimize NamedParameterUtils#buildValueArray by lazily fetching SqlParameter #36230
- Allow customization of the
ProxyFactoryinHttpServiceProxyFactoryused to create HTTP service proxies #36225 - Consistently close streams through try-with-resources in FileCopyUtils #36223
- Use Java Files utilities in FileCopyUtils #36221
- SqlBinaryValue and SqlCharacterValue should support InputStream content with undetermined length #36219
- Support JtaTransactionManager and SpringBeanContainer configuration on HibernateJpaVendorAdapter #36216
- Add TaskCallback/Callable/Runnable wrapper for retryable tasks #36208
- Refine YamlProcessor to allow different empty values #36207
- Anticipate fixing Kotlin 2.3 compilation warning #36203
- Allow YAML processors to create a flattened map with nulls included #36197
- Use Reader.transferTo in FileCopyUtils #36196
DataBufferUtils.write()with NettyDataBuffer on JDK 25 hangs indefinitely #36184- Make SendToMethodReturnValueHandler and SubscriptionMethodReturnValueHandler customizable, to allow for pass-through of message headers #36179
- Introduce
RestClient.ResponseSpec#requiredBody#36173 - Make scope fully configurable in BeanRegistry/BeanRegistrar #36171
- ConcurrencyThrottleSupport and thread interruption #36167
- Add overloaded sendAndReceive methods to JmsTemplate to use explicit response queue #36162
- WebClient (Reactor) attributes on Netty channel do not clear after connection release #36158
- Support HttpEntity on ContentRequestMatchers.multipartData #36154
- Reintroduce WebLogicJtaTransactionManager in Spring Framework 6.2.x #36151
- Back-off for
DefaultMessageListenerContaineris not applied consistently in case of listener setup failure #36143 - Early support for JPA 4.0 EntityAgent (autowiring a shared proxy) #36025
- Early compatibility with JPA 4.0 and Hibernate ORM 8.0 #35705
🐞 Bug Fixes
- Resolved HttpEntity Controller argument does not reflect mutated HTTP headers #36298
- Avoid lock congestion in ConcurrentReferenceHashMap #36293
- AbstractMessageConverter does not support wildcards in supported MIME types #36285
- Make
LocalEntityManagerFactoryBean#setDataSourcework on Hibernate as well as EclipseLink #36271 StompBrokerRelayMessageHandlerfails to restart due to test context pausing #36266- Deadlock might occur when calling
System.exiton startup (against multiple shutdown hooks) #36260 - Missing resource hint for
BeanRegistrarimplementingImportAware#36242 - Inconsistent behavior with
@Retryableon annotated interfaces #36233 Netty4HeadersAdapter.removereturns empty list instead ofnullfor non-existing key #36226- Generic type in AsyncTaskExecutor.submit(Callable) should be
@Nullable#36191 EclipseLinkConnectionHandlecan fail against transaction isolation race condition #36165
📔 Documentation
- Remove obsolete code in
Redirecting to a resourcesection #36284 - Fix formatting in Web MVC HTTP Message Conversion documentation #36250
- Remove obsolete doc for spring.context.annotated-bean-reader.create #36241
- Document
@SpringExtensionConfigin the reference manual #36240 - Fix JSON syntax in STOMP overview documentation #36229
- Revise documentation on JSR-330 support in the reference manual #36222
- Fix links to JUnit User Guide #36217
- Corrected the definition of coroutines #36209
- Fix
LocalContainerEntityManagerFactoryBean#setPersistenceUnitNamejavadoc #36205 - Update documentation on trailing slash handling where type-level
@GetMapping("/base") is combined with method level@GetMapping("/") #36198 - Update documentation on the MediaType used for ProblemDetail #36192
- Extract
DispatcherServletsnippets #36175 - Replace
getErrors()withgetBindingResult()in examples #36170 - Refine CORS documentation to match latest changes #36156
🔨 Dependency Upgrades
- Upgrade to Apache POI 5.5 #36174
- Upgrade to ASM 9.9.1 and Objenesis 3.5 #36243
- Upgrade to Micrometer 1.6.3 #36287
- Upgrade to Reactor 2025.0.3 #36288
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Ivarz, @catturtle123, @chschu, @deejay1, @dingqianwen, @dungdm93, @furaizi, @izeye, @kchung1995, @kilink, @msridhar, @ngocnhan-tran1996, @pgoslatara, @philwebb, @pisek, and @shub-est