Skip to content

Releases: spring-projects/spring-framework

v7.0.2

11 Dec 16:27

Choose a tag to compare

⭐ New Features

  • Avoid unnecessary list creation and processing in AbstractTestContextBootstrapper #35995
  • AbstractTestContextBootstrapper should resolve ContextLoader only once #35994
  • Log RetryException for @Retryable methods #35983
  • Consistently stop already started Lifecycle beans on cancelled refresh #35964
  • Support timeouts in @Retryable and RetryPolicy #35963
  • Use == instead of instanceof for primitive array type checks #35962
  • Introduce MultiValueMapCollector for use with streams #35958
  • Avoid package cycle caused by use of UriComponentsBuilder in ServletServerHttpRequest #35952
  • Target type in Converter interface should be @Nullable #35947
  • Provide access to attempt count in RetryListener as well as callbacks for the initial attempt #35940
  • DefaultHandshakeHandler should not log client faults on error level #35930
  • Log warning when meta-annotation is ignored due to types not present in classpath #35927
  • Revise ApplicationContext#getId() nullability to non-null #35925
  • Use concurrent set behind reactive TransactionSynchronizationManager#registerSynchronization #35921
  • Refine AbstractKotlinSerializationHttpMessageConverter#canWrite #35920
  • Register bean dependency for Optional injection point as well #35919
  • Change canRead/canWrite overrides to Class ones in AbstractSmartHttpMessageConverter #35916
  • Do not make HttpHeaders read-only in HttpEntity #35888
  • Add WebFlux SSE support with GSON #35884
  • Different ReactorNettyWebSocketSession call getId() may return the same value #35883
  • Refine nullability of Assert#noNullElements #35868
  • Allow configuring default maxIdleTime on InMemoryWebSessionStore. #35866
  • Refine BindingReflectionHintsRegistrar with ObjectToObjectConverter hints #35847
  • Add resetCaches() method to general CacheManager interface #35845
  • Enhance handleTypeMismatch error message in ResponseEntityExceptionHandler #35837
  • Add support for package-private BeanRegistrar in Spring AOT generated code #35803
  • Use ExtendedServletRequestDataBinder/ExtendedWebExchangeDataBinder for functional request binding #35800
  • Expose Collection on FragmentsRendering to facilitate Unit Tests #35775
  • Improve i18n-support for NoResourceFoundException #35758
  • Cache resolved singleton beans in injected Provider instance #35373

🐞 Bug Fixes

  • ContextConfigurationAttributes(Class) constructor incorrectly sets inheritLocations to false #36000
  • NullPointerException thrown from JdkClientHttpRequestFactory for null request header value #35996
  • State inconsistency in LazyConnectionDataSourceProxy when connection settings fail #35980
  • SubscriberInputStream#resume misuses parked thread reference #35978
  • Shared EntityManager returned by AbstractEntityManagerFactoryBean cannot be advised by AspectJ interceptor #35974
  • RestClient cannot make HEAD requests when the response declares gzip Content-Encoding #35966
  • ServerRequestObservationContext(s) miss Propagator.Getter method implementation #35965
  • Jackson used instead of kotlinx.serialization for more complex types #35960
  • Strong locking in ConcurrentReferenceHashMap#computeIfAbsent may cause context initialisation deadlock #35944
  • BridgeMethodResolver change in 6.2.13 breaks Spring Data entity introspection #35936
  • DefaultMessageListenerContainer does not clear Session and MessageConsumer for paused invokers #35932
  • Tighten cacheable decision behind @Lazy injection point #35917
  • AOT-generated bean definition does not consider name of RuntimeBeanReference using name and type #35913
  • Accidental fallback match for Collection-type beans due to @Bean-level qualifier annotation #35908
  • SingletonSupplier should be defensive against singletonInstance/initialized visibility mismatch #35905
  • SortedResourcesFactoryBean does not accept non-existent resources anymore #35895
  • Support reading unresolvable types in AbstractJacksonHttpMessageConverter #35889
  • Refine Kotlin Serialization codec type checks #35885
  • UrlHandlerFilter also removes query parameters and fragment when using HTTP redirect #35873
  • Fix handling of ServerSentEvent with Jackson encoder #35872
  • @EnableResilientMethods does not participate in globally enforced target class proxying #35863
  • RestTestClient can leak HTTP connections when no body expectations are performed #35784
  • Use provided ReactiveAdapterRegistry in BindingContext constructor #35771
  • PathMatchingResourcePatternResolver fails with URI in JAR manifest Class-Path entries #35682

📔 Documentation

  • Correct link to Reactive Libraries in reference docs #35970
  • Document that annotations are ignored if attributes reference types not present in the classpath #35959
  • Remove JUnit 4 based meta-annotation example #35903
  • Refer to "Spring Tools" instead of "Spring Tools for Eclipse" in reference manual #35901
  • Document that SpringExtension requires JUnit Jupiter 6.0 or higher #35900
  • Fix broken Javadoc links to methods #35899
  • Clarify JMS sessionTransacted flag for local versus global transaction #35897
  • Reference docs should not use obsolete "junit5" links #35892
  • Testing chapter references nonexistent Dependency Management documentation #35890
  • Wrong interface in WebFlux Documentation page for API Version #35887
  • Update reference documentation to use Jackson 3 #35886

🔨 Dependency Upgrades

  • Upgrade to json-path 2.10.0 #35924
  • Upgrade to Micrometer 1.16.1 [#3...
Read more

v6.2.15

11 Dec 10:32

Choose a tag to compare

⭐ New Features

  • Avoid package cycle caused by use of UriComponentsBuilder in ServletServerHttpRequest #35954
  • DefaultHandshakeHandler should not log client faults on error level #35948
  • Use concurrent set behind reactive TransactionSynchronizationManager#registerSynchronization #35922
  • Expose Collection on FragmentsRendering to facilitate Unit Tests #35912
  • Different ReactorNettyWebSocketSession call getId() may return the same value #35911
  • Enhance handleTypeMismatch error message in ResponseEntityExceptionHandler #35878

🐞 Bug Fixes

  • NullPointerException thrown from JdkClientHttpRequestFactory for null request header value #35998
  • State inconsistency in LazyConnectionDataSourceProxy when connection settings fail #35981
  • SubscriberInputStream#resume misuses parked thread reference #35979
  • PathMatchingResourcePatternResolver fails with URI in JAR manifest Class-Path entries #35967
  • Strong locking in ConcurrentReferenceHashMap#computeIfAbsent may cause context initialisation deadlock #35945
  • BridgeMethodResolver change in 6.2.13 breaks Spring Data entity introspection #35941
  • DefaultMessageListenerContainer does not clear Session and MessageConsumer for paused invokers #35935
  • Tighten cacheable decision behind @Lazy injection point #35918
  • Use provided ReactiveAdapterRegistry in BindingContext constructor #35914
  • Accidental fallback match for Collection-type beans due to @Bean-level qualifier annotation #35909
  • SortedResourcesFactoryBean does not accept non-existent resources anymore #35896

📔 Documentation

  • Document that annotations are ignored if attributes reference types not present in the classpath #35973
  • Fix broken Javadoc links to methods #35904
  • Refer to "Spring Tools" instead of "Spring Tools for Eclipse" in reference manual #35902
  • Clarify JMS sessionTransacted flag for local versus global transaction #35898
  • Reference docs should not use obsolete "junit5" links #35893
  • Testing chapter references nonexistent Dependency Management documentation #35891

🔨 Dependency Upgrades

  • Upgrade to json-path 2.10.0 #35937
  • Upgrade to Micrometer 1.14.14 #35986
  • Upgrade to Reactor 2024.0.13 #35987

v7.0.1

20 Nov 09:25

Choose a tag to compare

⭐ New Features

  • Align RestOperations Kotlin extensions nullability with Java one #35852
  • Add resetCaches() method to Caffeine/ConcurrentMapCacheManager #35840
  • Fix single-check idiom in UnmodifiableMultiValueMap #35822
  • Fix Spliterator characteristics in ConcurrentReferenceHashMap #35817
  • RestTestClient does not configure JsonPathAssertions in the same way as WebTestClient #35793

🐞 Bug Fixes

  • Fix JdbcOperations Kotlin extensions #35846
  • Fix getCacheNames() concurrent access in NoOpCacheManager #35842
  • Annotation discovery regression for interfaces extending BeanNameAware and co. #35835
  • MissingPathVariableException produces wrong status code in ProblemDetail #35829
  • Refine ParameterizedPreparedStatementSetter nullability #35749
  • Fix HtmlUtils unescape for supplementary chars #35477

📔 Documentation

  • Fix cross-reference links in HtmlUnit sections #35853
  • Remove @see Javadoc references to deprecated PropertiesBeanDefinitionReader #35836
  • Replace kotlin-issues attribute reference #35820
  • Document semantics and behavior of SpringExtension.getApplicationContext() #35764

❤️ Contributors

Thank you to all the contributors who worked on this release:

@juntae6942, @kilink, @ngocnhan-tran1996, and @quaff

v6.2.14

20 Nov 08:45

Choose a tag to compare

⭐ New Features

  • Add resetCaches() method to Caffeine/ConcurrentMapCacheManager #35841
  • Fix single-check idiom in UnmodifiableMultiValueMap #35831
  • Fix Spliterator characteristics in ConcurrentReferenceHashMap #35828

🐞 Bug Fixes

  • MissingPathVariableException produces wrong status code in ProblemDetail #35856
  • Fix getCacheNames() concurrent access in NoOpCacheManager #35844
  • Annotation discovery regression for interfaces extending BeanNameAware and co. #35838
  • Fix HtmlUtils unescape for supplementary chars #35832

📔 Documentation

  • Fix cross-reference links in HtmlUnit sections #35857
  • Remove @see Javadoc references to deprecated PropertiesBeanDefinitionReader #35854

v7.0.0

13 Nov 10:33

Choose a tag to compare

🍃 Please read the official release notes and upgrade guide

⭐ New Features

  • Make SessionHolder publicly accessible for external resource management #35799
  • RouterFunctions Builders do not support ServerResponse subtypes #35791
  • Configure Jackson CBOR codecs by default if present #35787
  • Rename maxAttempts to maxRetries in @Retryable and RetryPolicy #35772
  • Prevent Kotlin Serialization side effects #35761
  • Add default API version to the list of supported versions #35755
  • Improve user check in TransportHandlingSockJsService #35753
  • Update ApiVersionDeprecationHandler to provide access to handler #35750
  • Use dedicated classes for ApiVersionResolver implementations #35747
  • Provide AOT support for @Nested classes in a @ParameterizedClass #35744
  • AssertJ support for WebTestClient #35737
  • Reject attempt to use @MockitoSpyBean with a scoped proxy #35722
  • Provide a way to supply the client builder for an HttpServiceGroup #35707
  • Review HttpMessageConverters.Builder to improve readability of code using the API #35704
  • Configure custom Kotlin Serialization converter on HttpMessageConverters #35733

🐞 Bug Fixes

  • Missing support for UnprocessableContent in WebClientResponseException.create(HttpStatusCode, ..) methods #35802
  • Relax media type checks in HttpMessageConverters #35801
  • Fix HttpHeaders and WebSocketHttpHeaders interop issues #35792
  • @ConcurrencyLimit weird behavior when combined with @Async and @Transactional #35788
  • buildSrc:test failing on JDKs before JDK 25 #35777
  • Add jar validation and fix multi-release jar #35768
  • Upgrade to JUnit 6.0.1 and prevent AOT test scanning failure for JUnit 4 tests #35740
  • Fix port handling in HtmlUnitRequestBuilder #35709
  • RestTestClient.mutate() should not have side effects #35698

📔 Documentation

  • Document workaround for @PersistenceContext and @PersistenceUnit in test classes in AOT #31442

🔨 Dependency Upgrades

  • Upgrade to Jetty 12.1.4 #35805
  • Upgrade to Micrometer 1.16.0 #35811
  • Upgrade to Reactor 2025.0.0 #35779

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Sineaggi and @UpStreamThomas

v6.2.13

13 Nov 09:10

Choose a tag to compare

⭐ New Features

  • Support response encoding in select and options JSP form tags #35783
  • Preserve Connection readOnly state for DataSource with defaultReadOnly configuration #35743
  • Optimize resource URL resolution in SortedResourcesFactoryBean #35687
  • Relax multiple segment matching constraints in PathPattern #35686
  • Support wildcard path elements at the start of path patterns #35679
  • Validating byte[]s may produce OutOfMemoryError #35675
  • Update in FragmentsRendering to names of static methods #33974

🐞 Bug Fixes

  • ConcurrentReferenceHashMap misses dedicated computeIfAbsent, computeIfPresent, compute, merge implementations #35794
  • Avoid unnecessary bridge method resolution around getMostSpecificMethod #35780
  • Fix multi-release JAR issue with VirtualThreadDelegate #35773
  • ContentNegotiationManager not finding media type when request includes quality parameter #35754
  • Race condition in BufferingClientHttpResponseWrapper.getBody() #35745
  • Deprecate setConnectTimeout on HttpComponentsClientHttpRequestFactory #35748
  • Fix PathMatchingResourcePatternResolver to handle absolute paths in JAR manifests #35732
  • BeanDefinitionBuilder.addAutowiredProperty causes error during AOT processing #35731
  • Improve HttpServiceMethod support for Kotlin suspending functions returning Flow #35718
  • Exception translation does not expose original BatchUpdateException anymore #35717
  • Add hints for entities package-private methods #35711
  • Fix concurrency permit leak causing deadlock in SimpleAsyncTaskExecutor #35708
  • Remove jibx-marshaller element from spring-oxm.xsd #35699
  • NullPointerException When Handling 407 with JdkClientHttpConnector in WebClient #35692
  • Method-based Map injection fails against target Map with incomplete generics despite bean name or qualifier match #35690
  • JUnit Jupiter TEST_METHOD ExtensionContextScope is not fully supported #35680
  • Introduce isAutowirableConstructor(Executable, PropertyProvider) in TestConstructorUtils and deprecate existing variants #35676
  • Reflection on java.sql.Types without runtime hints #35674
  • getPubliclyAccessibleMethodIfPossible() returns hidden static method #35667
  • RestClient hangs during upload with ReactorClientHttpRequestFactory #34707

📔 Documentation

  • Correct formatting for Mono type #35786
  • Improve Java Bean Validation documentation for controller methods #35759
  • Fix typo in @NumberFormat Javadoc #35742
  • Javadoc of AsyncConfigurer does not match runtime behavior #35736
  • Document PathPattern behavior difference between */{name} and **/{*path} #35727
  • Fix minor typo in RestClient documentation #35723
  • Document test-method scoped TestContext semantics #35716
  • Improve docs on AbstractStreamingClientHttpRequest for streaming vs buffering mode #35700
  • Fix minor typo in JDBC Core Classes documentation #35684
  • Fix typos #35656
  • Improve spring-web filter documentation #30454

🔨 Dependency Upgrades

  • Upgrade to ASM 9.9 plus lenient version check patch #35763
  • Upgrade to Jetty 12.0.30 #35806
  • Upgrade to Micrometer 1.14.13 #35810
  • Upgrade to Reactor 2024.0.12 #35809

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Anxton, @Artur-, @HJC96, @MoadElfatihi, @NYgomets, @cbsingh1, @dmitrysulman, @ekcom, and @scordio

v7.0.0-RC3

31 Oct 07:46

Choose a tag to compare

v7.0.0-RC3 Pre-release
Pre-release

⭐ New Features

  • Deprecate the BeanShell scripting support #35720
  • Deprecate the lang XML namespace #35719
  • Deprecate Hamcrest methods in WebTestClient #35703
  • Remove Hamcrest dependency from RestTestClient #35702
  • AssertJ support for RestTestClient #35701
  • Use test-method scoped ExtensionContext in the SpringExtension #35697
  • Remove support for callable references in BeanRegistrarDsl #35694
  • Make Protobuf support extensible for gRPC #35403
  • Fix CRaC potential hangup after restoring #34372

🐞 Bug Fixes

  • Add support for Spring AOT with BeanRegistrar for attribute AutoProxyUtils.originalTargetClass #35645
  • SingletonSupplier is not singleton if null is returned on first supplier call #35380

📔 Documentation

  • Remove outdated Portlet mentions #35726
  • Move the "Groovy Bean Definition DSL" section to the Groovy page #35721
  • Remove outdated Spring version mentions #35696
  • Document automatic context propagation #35689
  • Refine documentation of BeanRegistrarDsl with RouterFunctionDsl #35549

🔨 Dependency Upgrades

  • Upgrade to Kotlin 2.2.21 #35714

❤️ Contributors

Thank you to all the contributors who worked on this release:

@YaSuenag, @dmitrysulman, and @nosan

v7.0.0-RC2

23 Oct 09:46

Choose a tag to compare

v7.0.0-RC2 Pre-release
Pre-release

⭐ New Features

  • Early support for Jakarta Servlet 6.2 and Jakarta Activation 2.2 #35670
  • Prevent compilation error with WebTestClient without Hamcrest #35666
  • Derive StatelessSession from transactional Session on Hibernate 7.2 #35664
  • Consistent support for JPA 3.2 transaction timeouts #35663
  • Add support for EntityManagerFactory bootstrapping from JPA 3.2 PersistenceConfiguration #35662

🐞 Bug Fixes

  • JdkClientHttpRequestFactory does not clean response headers when decompressing #35668
  • Make HttpStatus.resolve return non-deprecated one #35659
  • Reflection hints missing for SpringPersistenceUnitInfo.setPersistenceProviderPackageName #35655
  • Fix @Import with multiple bean registrars #35653

📔 Documentation

  • Declare Servlet mock classes with Servlet 6.1 baseline #35671
  • Fix code snippets in Javadoc for exchangeSuccessfully() #35642
  • Improve RestTemplate to RestClient migration guide #35620

🔨 Dependency Upgrades

  • Downgrade JSONassert to 1.5.x #34901
  • Fix Jetty multipart client support with Java 25 #35531
  • Upgrade to Jackson 3.0.1 #35677

❤️ Contributors

Thank you to all the contributors who worked on this release:

@donalmurtagh, @kamilkrzywanski, @malczuuu, @vpavic, and @wakingrufus

v7.0.0-RC1

16 Oct 08:24

Choose a tag to compare

v7.0.0-RC1 Pre-release
Pre-release

⭐ New Features

  • Align default order between @EnableAsync and @EnableResilientMethods #35643
  • Add first class ParameterizedTypeReference support to BeanRegistrar #35635
  • Support for JTA 2.1 read-only attribute #35633
  • UriComponentsBuilder#query should not clear queryParams if null passed in #35629
  • Revise PersistenceUnitInfo management for compatibility with JPA 3.2 as well as JPA 4.0 #35622
  • Deprecate TransactionCallbackWithoutResult #35606
  • Introduce queryParamPredicate in AbstractRequestLoggingFilter #35603
  • Add builder-based constructors to Jackson 3 infrastructure #35597
  • Refine StringUtils#splitArrayElementsIntoProperties nullability #35595
  • Support matching against exception causes in ExceptionTypeFilter #35592
  • Match against exception causes in @Retryable and RetryPolicy #35583
  • Improve configuration of HttpMessageConverters in RestClient and RestTestClient #35578
  • Support Bean Overrides for non-singletons #35574
  • Introduce findAnnotatedBeans(ListableBeanFactory) in ControllerAdviceBean #35571
  • Support explicitly specifying "no version" on a request #35566
  • Simplify overriding of default codec for Jackson 3 vs 2 #35562
  • Revise nullability of TransactionCallback, TransactionOperations, and TransactionalOperator #35561
  • Refine SingletonSupplier<T> supplier-based static methods nullability #35559
  • Add Kotlin extensions for RestTestClient #35558
  • Deprecation warning with GraalVM 25 due to --install-exit-handlers #35557
  • Introduce MapAccessor in SpEL and deprecate existing implementation in spring-context #35537
  • Add serialVersionUID in LinkedCaseInsensitiveMap #35535
  • Use uppercase for classpath-related static final field names #35525
  • Prevent empty declaration of @ConcurrencyLimit #35523
  • Nullability fixes for AtomicReference #35514
  • Enhance toString method in SockJsFrame #35510
  • Invoke ConfigurationBeanNameGenerator even if a '@Bean(name = ..)' is provided #35505
  • Add support for recording and reusing the outcome of classpath scanning #35497
  • Upgrade to NullAway 0.12.10 and refine nullability #35492
  • Introduce automatic context propagation in CoroutinesUtils#invokeSuspendingFunction #35485
  • Missing Nullable on body parameter in HttpClientErrorException.create methods. #35482
  • Introduce placeholder resolution support in @ConcurrencyLimit #35470
  • Refine PropagationContextElement #35469
  • Refine EntityManagerRuntimeHints for Hibernate 7.1+ #35462
  • Provide programmatic alternative to @ConcurrencyLimit #35460
  • Add caching to default JMS destination resolver #35456
  • Deprecate the org.springframework.web.servlet.view.document package #35451
  • Support injecting the API version into a controller method #35424
  • Provide access to raw content in RestTestClient #35399
  • Reject effectively private handler methods on CGLIB proxied controllers #35352
  • Use EmbeddedValueResolver to resolve value in MvcUriComponentsBuilder #35348
  • Upgrade to JUnit 6 #35124
  • Add ParameterizedTypeReference overload next to BeanFactory.getBeanProvider(ResolvableType) #31444
  • Provide GSON-based Encoder/Decoder #27131

🐞 Bug Fixes

  • ReactorResourceFactory is not restarted properly when ApplicationContext is resumed by TestContext Framework #35585
  • AbstractJacksonEncoder ignores FILTER_PROVIDER_HINT when encoding Flux<T> #35575
  • HttpMessageConverters overrides custom string converter #35563
  • Reinstantiate checks for kotlin-reflect #35511

📔 Documentation

  • Remove outdated reference to JSR 305 in the reference documentation #35580
  • Update Javadoc related to use of ApiVersionInserter to show examples #35565
  • Update references to HTTP service client in the documentation #35522
  • Update docs to replace use of "X-API-Version" as an example #35494
  • Document placeholder and Ant-style pattern support for @ComponentScan #35491

🔨 Dependency Upgrades

  • Upgrade to Jackson 3.0.0 #35521
  • Upgrade to Micrometer 1.16.0-RC1 #35639
  • Upgrade to Reactor 2025.0.0-RC1 #35637

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Allan-QLB, @HyunSangHan, @NeatGuyCoding, @Rockernun, @Wars, @YongGoose, @chemicL, @hosea, @msridhar, @polyglot-k, @quaff, and @sic2

v6.2.12

16 Oct 07:32

Choose a tag to compare

⭐ New Features

  • Add "forEachByte" variant to DataBuffer for efficient traversing #35623
  • Nested transaction support via savepoints is broken in HSQLDB database [followup] #35618
  • Improve exception handling in ConfigurationClassBeanDefinitionReader #35631
  • Add MySQL/MariaDB to TableMetaDataProviderFactory for correct generated-keys support #35593
  • Optimize state management in StompSubProtocolHandler #35591
  • ServletServerHttpRequest.getRemoteAddress() may perform DNS lookup #35589
  • Emit log message when multiple primary beans are detected #35550
  • Duplicate key error is mapped to TransientDataAccessException by SQLStateSQLExceptionTranslator for BatchUpdateException #35547
  • Remove redundant object allocation in cglib proxy method calls #35543
  • Remove deprecation on CandidateComponentsIndex and CandidateComponentsIndexLoader #35472
  • Processing response with no Content-Length header and no body raises EOFException #35361

🐞 Bug Fixes

  • DefaultListableBeanFactory::getBeanNamesForType does not always return all bean names #35634
  • Consider defaultCandidate for scoped proxies #35627
  • Release data buffer in AbstractCharSequenceDecoder even when String creation fails #35625
  • PathMatchingResourcePatternResolver is not able to resolve file in SpringBoot Packaged JAR #35617
  • Prevent NoClassDefFoundError when Jetty Reactive HttpClient is not available #35608
  • Performance regression with Property Placeholder Resolution #35594
  • Retain order of produces media types in @ExceptionHandler #35587
  • Nested transaction support via savepoints is broken in HSQLDB database #35564
  • SpEL expression parser uses more CPU after upgrade to 6.2.9 #35556
  • Thread race during FactoryBean instantiations starting with 6.2 due to lenient locks #35545
  • Update parsed path handling in UrlHandlerFilter #35538
  • ResourceHttpMessageWriter.write has unexpected error handling for invalid range requests (offset > content length) #35536
  • AbstractTestNGSpringContextTests is not thread-safe regarding tracked exceptions #35528
  • UrlHandlerFilter breaks RequestDispatcher.forward() on Tomcat #35509
  • AbstractMockHttpServletRequestBuilder#buildRequest is not idempotent #35493
  • Add support for JvmDefault (default in Kotlin 2.2.20+) #35487
  • InstanceSupplierCodeGenerator fails to detect deprecated type on package private factory method #35486
  • Fix synchronization in ResponseBodyEmitter #35466
  • useCaches option in PathMatchingResourcePatternResolver not applied in special case #35465
  • Deadlock during context initialization due to EntityManager lock #35398

📔 Documentation

  • Improve guidance in WebFlux on how to join inbound and outbound streams in WebSocketHandler #35572
  • Fix idref example in reference manual #35560
  • Fix URI Patterns docs in WebMVC and WebFlux Request Mapping #35551
  • Allow event listener method declared with multiple event classes to take a single parameter that is assignable from all of those event classes #35506
  • Improve Task Javadoc about Runnable wrapping #35394

🔨 Dependency Upgrades

  • Upgrade to Micrometer 1.14.12 #35640
  • Upgrade to Reactor 2024.0.11 #35638

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Entea, @IMurzich, @hosea, @maziyarbahramian, @mlichtblau, @nstdio, @reckart, and @reda-alaoui