Releases: spring-projects/spring-framework
v6.2.1
⭐ New Features
- Implement
toString()
inTestBeanOverrideHandler
#34072 - Log alias removal in
DefaultListableBeanFactory
#34070 - Log warning when one Bean Override overrides another Bean Override #34056
- Introduce "unsafeAllocated" flag in TypeHint #34055
- Cannot assert status reason phrase with MockMvcTester #34016
- Improve toString for reactive ScheduledTask #34010
- Optimize sending requests without a body in RestClient and WebClient with Reactor Netty #34003
- Add missing
@Contract
annotation toObjectUtils#isEmpty
#33984 - OptionalValidatorFactoryBean suppresses Hibernate Validator configuration failures too much #33979
- Support
Flux<ServerSentEvent<Fragment>>
in WebFlux #33975 - Update in FragmentsRendering to names of static methods #33974
- Honor
@Fallback
semantics for Test Bean Overrides #33924 AdvisedSupport.MethodCacheKey
should check for logical equality as well as identity #33915- Fail with full description for XML diff in
XmlExpectationsHelper
#33827 MapMethodProcessor
should only resolve arguments of type Map or the ModelMap hierarchy #33160
🐞 Bug Fixes
- Support binding from request headers via constructor args #34073
- Unable to configure custom scheduler for
@Scheduled
annotation #34058 - Identical Bean Overrides are silently allowed #34054
- OOM due to NoTransactionInContextException in reactive pipeline #34048
- Priority header causes binding exception after upgrade to Spring Framework 6.2.0 #34039
@MockitoBean
incorrectly injects supertype into subtype field #34025- NestedPlaceholder are not recursively resolved if the fallback is a placeholder #34020
- AOT no longer generates BeanInstanceSupplier signature for a CGLIB proxy with its public type #33998
- Nested transaction support via savepoints is broken in Oracle database #33987
- Proxy created with
IntroductionInterceptor
but withouttarget
always throws an exception #33985 ApplicationListener
no longer invoked for genericApplicationEvent
with 6.2.0 #33982- Error handling override in DefaultResponseErrorHandler ignored after upgrade to 6.2.0 #33980
- BeanCurrentlyInCreationException is thrown when multiple threads simultaneously try to create a FactoryBean #33972
- HandshakeWebSocketService assumes jakarta websocket is present #33970
@Value
cases SpringCGLIB$$0 required a bean of type java.lang.String that could not be found in Native compile when migrating to SB 3.4 #33960- PathMatchingResourcePatternResolver should not log directory-skip messages at info level #33956
- Avoid infinite recursion in BeanValidationBeanRegistrationAotProcessor with recursive generics #33950
- Skip runtime hint registration for validation constraint with missing dependencies #33949
- Move Kotlin value class unboxing to
InvocableHandlerMethod
#33943 MockReset
strategy is no longer honored for@MockitoBean
and@MockitoSpyBean
#33941TypeDescriptor
with recursive generics triggers infinite recursion inResolvableType.equals/hashCode
#33932- RestClient does not expose full URI template as attribute #33928
- Bean Overrides like
@MockitoBean
and@TestBean
should not be allowed onstatic
fields #33922 - Regression in duplicate beans with different method names #33920
📔 Documentation
- Fix link to MockMvcBuilders in reference documentation #34031
- Fix a typo in the filters documentation #33959
- Document visibility requirements for Bean Overrides #33923
- Fix typos and link in Observability documentation #33910
- SpEL documentation contains syntax errors #33907
- Improve explanation of AOP advice classes that should implement
MethodInterceptor
#33901 - Reflect well-known HttpHeaders intent in Javadoc #33886
- Reflect well-known MediaTypes intent in Javadoc #33754
- Document support for varargs invocations in SpEL #33332
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Boiarshinov, @CHOICORE, @KNU-K, @izeye, @ngocnhan-tran1996, @scordio, @sonallux, and @youabledev
v6.1.16
⭐ New Features
- Log alias removal in
DefaultListableBeanFactory
#34071 - OptionalValidatorFactoryBean suppresses Hibernate Validator configuration failures too much #34041
- Update UndertowHttpHandlerAdapter to dispatch #33969
🐞 Bug Fixes
- HandshakeWebSocketService assumes jakarta websocket is present #34023
📔 Documentation
🔨 Dependency Upgrades
v6.2.0
⭐ New Features
- Update UndertowHttpHandlerAdapter to dispatch #33885
- Refine
@Contract
Javadoc to mentionthis
andnew
return values #33849 - AOT processing for bean validation does not consider cascaded and container element constraints #33842
- Avoid repeated resolving of singleton beans through
@Lazy
proxy #33841 - Regiser runtime hints for
@TestBean
fully-qualified method names #33836 - Introduce support for custom reason in
@DisabledInAotMode
#33833 - Use optimistic locking where possible in
ResponseBodyEmitter
#33831 - Revise cookies support with Apache HTTP Components in WebClient and WebTestClient #33822
- Remove the
pure
attribute from@Contract
#33820 - Introduce
@CheckReturnValue
annotation #33818 - ResourceHttpRequestHandler throwing IllegalArgumentException if resource doesn't end with slash breaks some third-party libraris #33815
- Provide first-class virtual thread option on
ThreadPoolTaskExecutor
/ThreadPoolTaskScheduler
#33807 HttpServiceProxyFactory
should omit optional@RequestParam
if converted fromnull
to empty string #33794- Reactor Netty response should not buffer the full response #33781
- Relax the visibility of MockMVC DSL constructors #33778
- Support Publisher to InputStream conversion #31677
🐞 Bug Fixes
MockReset
should be honored without@Mockito[Spy]Bean
fields #33829- Test Bean Overrides do not honor
@Primary
semantics #33819 - Bean Overrides cannot reliably override beans created by a
FactoryBean
with generics #33811 - Bean Overrides for certain
FactoryBean
use cases no longer work #33800 @MockitoBean
,@MockitoSpyBean
, &@TestBean
do not work with@DirtiesContext
"before method" modes #33783- Deprecate exchangeTimeout and refactor readTimeout in ReactorClientHttpRequestFactory #33782
📔 Documentation
- Revise documentation for SpEL
PropertyAccessor
andIndexAccessor
APIs regarding ordering #33862 - Document UrlHandler Servlet and reactive filters #33784
- Improve documentation for
SpelCompilerMode
#33223
🔨 Dependency Upgrades
- Upgrade to ASM 9.7.1 (for early Java 24 support) #33821
- Upgrade to Micrometer 1.14.0 #33876
- Upgrade to Reactor 2024.0.0 #33878
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Hejow, @OlegDokuka, and @lucky8987
v6.1.15
⭐ New Features
- Use UriUtils to process static resource paths #33859
- Prefer modified resources over the originals in TestCompiler #33850
- Improve iteration methods in native headers to MultiValueMap adapters #33823
- Deregister empty
Cache
fromCacheManager
#33813 - Rename
aopAvailable
constants inTransactionSynchronizationUtils
for better GraalVM native image support #33796 - Load-time weaving support for WildFly 24+ #33728
🐞 Bug Fixes
- DefaultClientRequestObservationConvention generates wrong uri tag when missing path #33867
- HttpComponentsClientHttpRequestFactory setReadTimeout not working with httpclient 5.4 #33806
- HttpHeaders.writeableHttpHeaders(new HttpHeaders(readOnlyHttpHeaders)) is not writeable #33789
- RestClient exchange methods are not nullable #33779
- Throw
SpelParseException
for unsupported character inSpelExpressionParser
#33767 - DefaultMessageListenerContainer reports incorrect jms.process.message count #33758
- Autowiring fails if multiple non-highest
@Priority
beans exist with same priority #33733 - Jackson2Decoder leaks on WebClient timeout #33731
- DefaultServerRequestObservationConvention throws when response status is zero #33725
- Aspect executed twice -
@AfterThrowing
#33704 - parts w/o filename in
Content-Disposition
header are not cleaned from temp folder (skipped byStandardServletMultipartResolver
) #33511
📔 Documentation
- Resources link points to wrong section of reference guide #33882
- Remove mentions of Joda-Time support #33881
- SimpleAsyncTaskExecutor blocks calling thread when concurrencyLimit set #33873
- Fix formatting issue in validation section of reference guide #33871
- Fix typo in reference documentation #33865
- Fix XML bean reference example in reference manual #33855
- Fix a typo in documentation #33846
- Numerous warnings when injecting dependencies into configuration that implements CachingConfigurer #33834
@Async
documentation should not suggest deprecated classes #33805- Document that circular dependencies should be avoided in AOT mode #33786
- Inconsistent Lifecycle Management with Virtual Threads in Spring Boot Async Configuration #33780
- Fix incorrect regex rendering in MVC controller documentation #33766
- Improve documentation for
allowEagerInit
parameter ingetBeanNamesForType()
#33740 - Fix Javadoc in ReactorNetty2ResourceFactory #33735
- Document options for handling Date/Time parsing and formatting issues with JDK 20+ #33151
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Torres-09, @ZLATAN628, @hosamaly, @izeye, @kunaljani1100, @ngocnhan-tran1996, and @wilkinsona
v6.2.0-RC3
⭐ New Features
- Update retrieve() in RestClient to execute and extract in single scope #33777
- Remove
proxyTargetAware
attribute from@MockitoSpyBean
#33775 - PathMatchingResourcePatternResolver sorting of JAR resources #33771
- Add default handling for disconnected client errors to Spring MVC #33763
- Remove ServerResponse.AsyncBuilder interface #33736
- Fix
PathMatchingResourcePatternResolver
manifest classpath discovery #33705 - Add cookie support to RestClient #33697
🐞 Bug Fixes
@MockitoSpyBean
does not support transparent verification #33774- Bean with
defaultCandidate = false
and qualifier does not work with constructor injection #33762 - Update
HttpHeaders.setHost()
to actually remove the Host header #33716
📔 Documentation
- Rework links to Spring Boot docs in reference documentation #33776
- Add Kotlin examples in aot.adoc #33761
- Improve the discoverability of Java and Kotlin APIs documentation from the refdoc #32835
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Nicklas2751, @bivo, @philwebb, and @roll-w
v6.2.0-RC2
⭐ New Features
- Verify static resource location ends on slash #33712
- Support record canonical constructor in
BeanUtils
#33707 - Rename
OverrideMetadata
for Bean Overrides #33702 - Rename
BeanOverrideStrategy
enum constants #33701 - Polish
ServletWebRequest
#33698 - Remove support for relative paths in static resource handling #33687
- Add
value
attribute alias to@MockitoBean
and@MockitoSpyBean
#33680 - Reject bean names with factory prefix for Bean Overrides #33674
- Revise handling of URI variable syntax in WhatWG URL parser #33673
- Introspect pre-registered singletons in
preDetermineBeanTypes
as well #33668 - Remove unnecessary array length check #33655
- Polish
CorsConfiguration
#33650 - Add URL Parser for RFC 3986 #33639
- Handle X-Forwarded-Prefix parsed by Reactor-Netty in ReactorServerHttpRequest #33638
- RestClient should auto-detect ReactorClientHttpRequestFactory #33635
- Improve random source in SockJS support #33632
- Stop replacing existing Bean Override definitions with pseudo-definitions #33627
- Introduce
enforceOverride
flag in@TestBean
and@MockitoBean
#33613 - Refactor unwrapOptional method to improve readability and performance #33612
ServerSentEvent
should implementequals()
andhashCode()
#33606- Reduce the GC pressure due to
NoTransactionInContextException
instances #33601 - Make
DynamicPropertyRegistrarBeanInitializer
public #33593 - Improve
toString()
forAbstractBeanDefinition
andBeanMetadataAttribute
#33579 - Add utility methods for resource handler checks #33574
- UrlHandlerFilter should not strip the trailing slash from the contextPath URL #33565
- AbstractGenericHttpMessageConverter has no constructor taking a Charset #33563
- JdbcClient ResultQuerySpec - Provide a optionalValue() method #33560
- Add read timeout setter on HttpComponentsClientHttpRequestFactory #33556
- Fix virtual thread pinning caused by synchronized blocks in
EclipseLinkJpaDialect
#33546 - Add
RestClient.Builder#messageConverters(List)
#33536 - Refine null-safety for additional
Assert
methods #33530 - Throw runtime error for
@TransactionalEventListener
when@Transactional
propagation level is notREQUIRES_NEW
orNOT_SUPPORTED
#33470 - With virtual threads enabled, long-running
fixedDelay
tasks blockfixedRate
tasks #33408 - Provide a public mechanism for detecting if AOT processing is in progress #33388
- Use only one request timeout mechanism in JdkClientHttpRequest #33090
- Support bean override features with AOT and native image #32933
- Limit reflective operations in
BeanInstanceSupplier
with Spring AOT #32834 - Mixin created with
IntroductionInterceptor
results in dynamic proxy instead of CGLIB proxy #31304 - Lenient URI parsing in ServletServerHttpRequest #30489
- Exclude authorization messages from ERROR logging in StompSubProtocolHandler #28252
- Propagate fully capable ServletContext in AbstractContextLoaderInitializer (for SessionCookieConfig access) #22319
🐞 Bug Fixes
- PropertySourcesPropertyResolver no longer converts to non CharSequence types #33727
- Lower-casing of scheme in UriComponentsBuilder breaks use of URI variables #33699
- Remove
@MockitoBeanSettings
and support forMockitoSession
management #33692 @MockitoBeanSettings
is not inherited in@Nested
test class #33685- AOT fails when generating code for a component declared as an inner-class #33683
@MockitoBean
reset andMockitoSession
management do not work with@Nested
tests #33676- DurationFormatterUtils should not attempt to parse an empty duration #33669
DefaultServerHttpRequestBuilder
can create case-sensitiveHeaders
instances #33666- Context cache is broken if two Bean Override fields declare annotations in different order #33633
- Test bean override support should only override singletons #33602
- Kotlin checked exception thrown from proxy service causes
UndeclaredThrowableException
#33585 - Autowiring of generic beans with array types is broken since 6.2.0-M1 #33535
AnnotatedBeanDefinitionReader
should respect@Fallback
qualifier analogous to@Primary
#33533
📔 Documentation
- Add Javadoc since for headers() in Delete/Patch/Post/PutExchange #33723
- Document XML parser usage against security false positives #33713
- Update scheduling.adoc #33709
- Document
TestExecutionListener
implementations introduced in 6.2 #33661 - Replace RFC 7807 with RFC 9457 in documentation #33594
- Document that
TestContextAnnotationUtils
is required for proper@Nested
test class support #33586 - Replace
e.g.
withfor example
#33515 - Document non-default candidate beans and Java-based configuration of non-autowire candidate beans #33392
🔨 Dependency Upgrades
- Upgrade to Jackson 2.18 #33615
- Upgrade to Micrometer 1.14.0-RC1 #33648
- Upgrade to Reactor 2024.0.0-RC1 #33636
❤️ Contributors
Thank you to all the contributors who worked on this release:
@EugeneNik, @J-unStiN, @Jaeyoung22, @Seungpang, @SungbinYang, @TAKETODAY, @boulce, @cfredri4, @chemicL, @chschu, @cmagnuson, @izeye, @khyojun, @kimjuke, @ngocnhan-tran1996, @quaff, @smartandhandsome, and @zinzoddari
v6.1.14
⭐ New Features
- Use Locale.ROOT for locale neutral, case insensitive comparisons #33708
- Improve checks for relative paths in static resource handling #33689
- CorsUtils.isCorsRequest throws unhandled IllegalArgumentException and returns 500 Internal Server Error on malfomed Origin header #33682
- Skip processing of Java annotations in
QualifierAnnotationAutowireCandidateResolver
#33580 - Include argument name in
MethodArgumentTypeMismatchException
error message #33573 - Preserve coroutine context in WebClientExtensions #33548
- Blocking call detected in ConcurrentReferenceHashMap by BlockHound #33450
- Warning message about bean post-processing and eager injection may suggest the wrong cause #33184
🐞 Bug Fixes
- DelegatingFilterProxy Causes Pinned Virtual Threads #33656
- Potential NPE from
MethodParameter.getMethod()
check inKotlinDelegate.hasDefaultValue()
#33609 - Missing native image hints for JDK proxies created by JMS connection factories #33590
AotTestExecutionListener
should not be invoked for a@DisabledInAotMode
test class #33589- Use encoded resource path instead of input path validation in spring-webflux #33568
org.springframework.util.ResourceUtils#toRelativeURL
drops customURLStreamHandler
#33561- Current observation not in scope during WebClient ExchangeFilterFunction execution #33559
ZoneIdEditor
throws wrong exception type forTypeConverterSupport
#33545- MimeMessageHelper addInline with ByteArrayResource fail with null filename #33527
@Cacheable
throwsNullPointerException
whenRuntimeException
is thrown inside annotated code #33492- Path variable values missing in RedirectView when PathPattern are used #33422
- Reactive
HttpComponentsClientHttpResponse
ignoresExpires
cookie attribute #33157
📔 Documentation
- Update fallback.adoc #33721
- Update scheduling.adoc #33703
- Fix link in testing/support-jdbc.adoc #33686
- Adapt Javadoc note about log level of BeanPostProcessorChecker #33617
- Reference the spring-framework-petclinic repository wich uses AspectJ #33539
🔨 Dependency Upgrades
- Upgrade to Apache HttpClient 5.4 #33587
- Upgrade to Apache HttpCore Reactive 5.3 #33588
- Upgrade to Awaitility 4.2.2 #33604
- Upgrade to Micrometer 1.12.11 #33647
- Upgrade to Reactor 2023.0.11 #33637
❤️ Contributors
Thank you to all the contributors who worked on this release:
@arey, @asibross, @boulce, @drdpov, @hosamaly, @ilya40umov, @izeye, and @junhyeongkim2
v6.2.0-RC1
⭐ New Features
- Update
mime.types
and remove commented entries #33512 - Provide access to the unexpanded URI template when using MockMvc #33509
- Avoid empty array allocations in AnnotationTypeMapping #33507
- Introduce
DynamicPropertyRegistrar
as a replacement forDynamicPropertyRegistry
bean support #33501 - Avoid storing duplicate empty array in MethodParameter field #33496
- Avoid empty array allocations in ResolvableType #33473
- Update Content-Length when body changed by Interceptor #33459
- UrlHandlerFilter should not strip the trailing slash from root URLs #33444
- Unwrap CGLIB proxy when invoking non-proxied methods in
ReflectionTestUtils
#33429 - Refactor eTag formatting logic into a static utility method #33412
- Encapsulate ETag comparison logic #33385
- Harmonize Reactor client class names within the
http.client
package #33382 - Allow multiple listeners on ResponseBodyEmitter #33356
- Invoke init/destroy/SpEL methods via public declaring type whenever possible #33216
- Create WebFlux equivalent filter to handle URLs with trailing slashes #32830
- Provide more ways to stream through ServerResponse for WebMvc functional endpoints #32710
- Avoid buffering all elements before sending JSON when using Flux/Flow + Kotlinx Serialization Encoder #33428
🐞 Bug Fixes
BeanCurrentlyInCreationException
is thrown when multiple threads get a bean fromStaticApplicationContext
's Bean Factory #33463
📔 Documentation
- Revise reference documentation for Spring JMX annotations #33466
- Add Javadoc since for ReflectionHints.registerForInterfaces() #33458
- Revise AOP proxying section of the reference manual #33455
- Consolidate self injection documentation in the reference manual #33454
- Expand acronyms
FQN
andFQCN
#33452 - Document that WebFlux does not support forward redirects #33441
- Document TaskDecorator usage with TaskExecutors #33438
🔨 Dependency Upgrades
- Upgrade to JUnit 5.11 #33395
- Upgrade to Micrometer 1.14.0-M3 #33520
- Upgrade to Reactor 2024.0.0-M6 #33521
❤️ Contributors
Thank you to all the contributors who worked on this release:
@hyunmin0317, @imzhoukunqiang, @izeye, @kilink, @quaff, and @tafjwr
v6.1.13
⭐ New Features
- Errors thrown from SmartLifeycle#stop results in (unnecessary) waiting for the shutdown timeout #33442
- Updates to resource handling for functional endpoints #33434
- Stop logging
result
inWebAsyncManager
#33406 - spring native not support method handler with kotlin default value #33384
🐞 Bug Fixes
- BindingReflectionHintsRegistrar do not take into account the boxed type Boolean #33380
- Ensure use of specified status code on redirect with
Rendering
#33498 - Inconsistent handling of X-Forwarded-Prefix in servlet and reactive stack #33465
- ServerHttpObservationFilter does not register against new async operations #33451
- Revert removal of deprecated rawStatusCode methods #33440
- PathMatchingResourcePatternResolver no longer follows symlinks #33424
- Deadlock between SseEmitter and StandardServletAsyncWebRequest when clients disconnect #33421
- RestClient doesn't open a scope for the processing of the request #33397
- WebTestClient leaks when ParameterizedTypeReference is used #33389
📔 Documentation
- Document fixed rate scheduling with CRaC #33490
- Update information in SpEL Evaluation chapter in reference manual #33456
- Stop documenting use of
-debug
compiler flag in reference manual #33453 - Use discrete headings instead of titled blocks in reference manual #33447
- Fix example for
@ImportResource
in the reference manual #33446 - Fix a typo in the CDS documentation #33437
- Fix link to chapter introduction #33417
- Improve documentation on reading form data via Servlet request parameters vs
@RequestBody
#33409
🔨 Dependency Upgrades
- Upgrade to Kotlin 1.9.25 #33471
- Upgrade to Micrometer 1.12.10 #33518
- Upgrade to Objenesis 3.4 #33526
- Upgrade to Reactor 2023.0.10 #33519
❤️ Contributors
Thank you to all the contributors who worked on this release:
@dancer1325, @izeye, and @yfoel
v6.2.0-M7
⭐ New Features
- Improve optional parameter checks for HTTP Interface argument #33339
- Two
@Bean
methods with the same bean name should consistently throw an exception #33330 - Support static headers for http interface clients #33309
- Add DatabaseClient bind variant for list of positioned parameters #33274
HandlerMethodValidator
should support simple Cross-Parameter constraints #33271- UserCredentialsConnectionFactoryAdapter should provide credentials to createContext #33270
- Support flexible multi-unit duration format in
@DurationFormat
#33262 - MockMvc should prepare a FilterRegistration when initializing filters #33252
- Add option to ignore bean registration with AOT #33243
- Support JAXBElement in Jaxb2RootElementHttpMessageConverter #33233
- MimeMessageHelper does not set filename on inline MimeBodyPart #33230
- Add handling for AsyncRequestNotUsableException to ResponseEntityExceptionHandler #33225
- Allow formatting of Collection values for
@RequestParam
with HTTP interface client #33220 - Support rendering stream of fragments #33194
- Allow resolving nested placeholders if value is not
String
butCharSequence
#32876 - Support multiple style of parsing/printing Durations #30396
- Restore support for Freemarker request parameters and taglibs now that it supports Jakarta #30186
- AOT/native support when registering beans with the Kotlin DSL #29555
- Offer a way for MockitoTestExecutionListener to enable strict stubbing #33318
- Provide access to all counters in case of BatchUpdateException with multiple batches #23867
- Low level cache failure for sync/reactive/future Cacheable get is not handled by CacheErrorHandler #21590
🐞 Bug Fixes
- Programmatic NoUniqueBeanDefinitionException in CacheAspectSupport should match message structure #33305
- JdbcClient.MappedQuerySpec::single can return null #33300
- Registration of
DynamicPropertyRegistry
in a test context has broken native testing #33272 MapAccessor#canWrite
incorrectly returnstrue
for non-Map
target #33265- BeanDefinition processed by AOT does not keep fallback flag #33261
- ImportSelector#getExclusionFilter does not exclude matching candidates with import selector #27080
📔 Documentation
- Document that SpEL expressions using bean references are not compilable #33363
- Remove duplicated "the" in Javadoc #33308
- Update documentation for fragment rendering #33195
- Document ControllerAdviceBean as internal usage #32776
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@OlgaMaciaszek, @benelog, @deblockt, @doljae, @izeye, @quaff, and @zinzoddari