Releases: spring-projects/spring-framework
v6.1.2
⭐ New Features
- Optimize ContentCachingRequestWrapper allocation for known request size #31834
- Inherit parent context in
coRouter
DSL #31831 - Declare
isStatic
andreleaseTarget
as default methods onTargetSource
#31820 - Delegation support for JDBC 4.3 ConnectionBuilder and ShardingKeyBuilder #31795
- Support for a read-only DataSource in LazyConnectionDataSourceProxy #31785
- Add
MySQLIdentityColumnMaxValueIncrementer
#31784 - Introduce overloaded
MockPart
constructor that accepts theContent-Type
#31757 - Introduce
toString(Charset)
inFastByteArrayOutputStream
#31737 - Avoid byte array copy in getContentAsString #31731
- Improve "active" metrics handling in WebClient observations #31702
- Make ResourceArrayPropertyEditor supports comma delimited location patterns #31700
- Consistently log exceptions from
TestExecutionListener
s atWARN
level #31688 - Document need for
-parameters
flag in exception messages #31675 - Improve
@RegisterReflectionForBinding
for enums #31570 - Support direct shard database operation routing in Spring JDBC #31506
- Log test aborted/skipped exceptions at INFO level in the TestContext framework #31479
- Avoid double proxying for
@Resource
@Lazy
fallback autowiring #31447 - Add support for tuning the code generation for bean property values #31427
- Avoid race condition in ConcurrentReferenceHashMap #31008
- Allow functional bean registration to set bean order (equivalent to
@Order
) #30849 - Allow AOT generated classes to be excluded from code analyzer tools #30824
- Error page does not utilize forwarded prefix #30828
- Fix
SimpleJdbcCall
named parameter binding for Sybase ASE #30231 - DefaultWebClient ignores baseUrl when setting URI_TEMPLATE_ATTRIBUTE #30027
- Avoid eager checkDefaultConnectionProperties call in LazyConnectionDataSourceProxy #29931
- Allow TransactionAwareDataSourceProxy to eagerly fetch the connection #29423
- Extract common value generator out of BeanDefinitionPropertyValueCodeGenerator #28999
- PostgresCallMetaDataProvider should detect current schema as indicated by the JDBC Connection #28723
- Implement setMaxTextMessageSize and setMaxBinaryMessageSize in JettyWebSocketSession #28325
- Optimize cache used in AutowiredAnnotationBeanPostProcessor #28293
@Async
aspect should clear cached executors when different BeanFactory set #28201- Component scanning should be able to ignore encrypted classes with invalid class version #27691
- Property to control URL decoding in
ServletCookieValueMethodArgumentResolver
#26989 - Support
Predicate
- based mappedHandler config inAbstractHandlerExceptionResolver
#26772 SimpleJdbcCall
withnamedBinding=true
for MS SQL Server #26072- Improve default
setNull
performance on PostgreSQL and MS SQL Server (e.g. forNamedParameterJdbcTemplate
batch updates) #25679
🐞 Bug Fixes
<replaced-method />
unnecessarily requires explicitarg-type
since 6.0 #31826- Avoid nested constructor data binding if there are no request parameters #31821
- Custom Init or Destroy method from an interface cannot be invoked in a native image #31819
- Avoid potential refresh deadlock with AbstractApplicationContext#registerShutdownHook #31811
- Classes proxied by CGLIB produces NPE with coroutine async job on Springboot 3.2.0 #31809
- Fix Comparators.nullsLow and Comporators.nullsHigh behavior #31808
MergedAnnotations
finds duplicate annotations on method in multi-level interface hierarchy #31803- Pickup coroutineContext saved by CoWebFilter in coRouter #31793
- Support for multiple CoWebFilters that change CoroutineContext #31792
- TestCompiler should not discover annotation processors on the classpath by default #31791
@Cacheable
key generator is called after invoking the cached method in case of a miss #31789- Encountered
NotSerializableException
forHttpComponentsHeadersAdapter
when serializingHttpClientErrorException
#31787 - Exclude
Part
from nested constructor binding in WebFlux #31778 - Fix condition for "Too many elements" in
MimeTypeUtils.sortBySpecificity()
#31769 AnnotatedTypeMetadata
'sgetMergedRepeatableAnnotationAttributes()
method ignoresclassValuesAsString
#31768- SimpleAsyncTaskScheduler: task with fixed delay stops working after unhandled exception #31749
- Spring unable to decode aggregated JSON content #31747
- cannot resolve
ServerRequest::pathVariable
in nestedRequestPredicate
again #31732 @NotNull
on JPA entity not respected in schema generation #31726@Cacheable
throws NullPointerException when encountering cached null value for empty Mono #31722- RestClient ResponseSpec.body() throws an exception instead of returning
null
if no response body is available #31719 - UrlResource getFilename() suddenly returns null for certain paths #31718
- DisconnectedClientHelper is missing "AbortedException" #31717
- Constructor binding fails for
Duration
argument if request parameter is not present #31709 - TraceId is missing in WebFlux controller handlers #31706
- Wrong observation status tag when a Not Found in a webflux application #31703
- Correct conversion from Resource[] with length 1 to Collection #31699
@ComponentScan
added directly and via a meta-annotation leads to multiple scanning #31704- Unable to use kotlin value classes as function arguments to functions mapping web endpoints #31698
@DisabledInAotMode
does not work in native image #31705- GenericTypeResolver does not resolve nested generics - causes...
v6.0.15
⭐ New Features
- Skip buffer allocation in
StreamUtils.copy(String)
#31631
🐞 Bug Fixes
<replaced-method />
unnecessarily requires explicitarg-type
since 6.0 #31828MergedAnnotations
finds duplicate annotations on method in multi-level interface hierarchy #31824- Fix condition for "Too many elements" in
MimeTypeUtils.sortBySpecificity()
#31773 - Spring unable to decode aggregated JSON content #31772
- Multipart messages with empty parts are not correctly parsed in WebFlux #31766
- PathEditor cannot handle absolute Windows paths with forward slashes #31727
- TraceId is missing in WebFlux controller handlers #31716
- Wrong observation status tag when a Not Found in a webflux application #31715
- Fail to register MBean with bean name containing invalid character #31708
- Include Hibernate's
Query.scroll()
inSharedEntityManagerCreator
'squeryTerminatingMethods
set #31683 - TypeDescriptor does not check generics in
equals
method (for ConversionService caching) #31673 - SpEL expression on a reloadable type can no longer be resolved #31670
- Slow SpEL performance due to method sorting in ReflectiveMethodResolver #31664
- Jackson encoder releases resources in wrong order #31656
- Current Observation.Context missing from WebClient request #31646
- WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #31641
<jee:local-slsb>
no longer works with abusiness-interface
attribute #31630- GeneratedFiles#addSourceFile should not allow to add a source in the default package #31629
PathResourceResolver.getResource()
does not log warning ifResource#getURL()
throws exception #31624
📔 Documentation
- Document explicit
@ModelAttribute
is required for reflection hints inference #31767 - Documentation needs to be updated with instructions for STOMP Client #31678
- Improve STOMP WebSocket documentation for input message buffer size #31654
🔨 Dependency Upgrades
- Upgrade to Reactor 2022.0.14 #31815
v6.1.1
⭐ New Features
- Skip buffer allocation in
StreamUtils.copy(String)
#31621 - Caching and Event Listening support do not reuse internal delegates for their evaluation contexts #31617
- Java 17: resource.isReadable() with concurrency leaks large amounts of non-heap memory #30955
🐞 Bug Fixes
- Spring MVC: Unexpected bytes added to the HTTP response for kotlin.Unit return type in controller methods #31648
- Spring Data Redis Cache implementation is not compatible with
Cache.retrieve(key)
semantics #31637 - GeneratedFiles#addSourceFile should not allow to add a source in the default package #31628
<jee:local-slsb>
no longer works with abusiness-interface
attribute #31627- Non-blocking
@Cacheable
method does not support condition with#result
#31626 PathResourceResolver.getResource()
does not log warning ifResource#getURL()
throws exception #31623- Jackson encoder releases resources in wrong order #30493
- WebSocketMessageBrokerStats has null stats for stompSubProtocolHandler since 5.3.2 #26536
📔 Documentation
- Fix links related to Spring WebFlux #31632
- Extract recurring asciidoc links to attributes #31619
- Improve STOMP WebSocket documentation for input message buffer size #31616
- Document support for AppCDS #31497
❤️ Contributors
Thank you to all the contributors who worked on this release:
@7fantasy7, @Star-ho, and @quaff
v6.1.0
⭐ New Features
- When using Oracle,
JdbcClient.update(KeyHolder)
does not work without explicit key column names #31607 - Introduce way to convert ClientHttpResponse to desired type #31597
- Property-driven onRefresh exit for AppCDS purpose #31595
- No Micrometer traceId in JMS listener container errorHandler #31559
- Register Hibernate
@EmbeddableInstantiators
registered on JPA embeddables for reflection #31534 - Improve method validation support for errors on elements within a container #31530
- Support pattern matching for method names in
ControlFlowPointcut
#31435 - Review reachability metadata contributions after GraalVM changes #31213
- handleEmptyBody of RequestBodyAdvice should apply also when content-type is not set #30522
🐞 Bug Fixes
- Regression with
@EnableJpaAuditing
using Spring Boot 3.2-RC2 in native image #31575 - Retrieving the response body as a List of POJOs fails with
RestClient
but passes withWebTestClient
#31574 ExecutorLifecycleDelegate
should callExecutorService.isTerminated()
in?.isRunning()
#31549RestTemplate
POST to endpoint using Digest Auth no longer works in 6.1 #31516- Code generation for constructor arguments must cast
null
indexed argument value #31508 - \n in form model when using Jetty 12 client and multipart/form-data #31361
- Add status handler to recognize unknown status codes outside of 4xx/5? #31202
📔 Documentation
- Document how to log
@Sql
scripts and statements #31589 - Link to KDoc API documentation from Javadoc overview #31587
- Fix link in Javadoc of ConfigurableMockMvcBuilder #31542
- Add note about
@[Enabled|Disabled]InNativeImage
in reference manual #31438 - Document
@DisabledInAotMode
in the reference manual #31437 - Document
@Sql
class-level execution phase support in the reference manual #31377 - Document that Micrometer's "error" tag should be preferred vs. legacy "exception" tag #31514
🔨 Dependency Upgrades
- Upgrade to Context Propagation 1.1.0 #31599
- Upgrade to Kotlin 1.9.20 #31539
- Upgrade to Micrometer 1.12.0 #31556
- Upgrade to Reactor 2023.0.0 #31557
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Young-Zen, @duesenklipper, @izeye, @k-seth, and @wakingrufus
v6.0.14
⭐ New Features
- Provide caching for HandlerMappingIntrospector lookups #31588
Log4jLog
needs to re-resolveExtendedLogger
on deserialization (for compatibility with Log4J 2.21) #31582- Optimize
StandardTypeLocator
for hotspot when the same classes are resolved #31579 - Add duplicate key exception error code for SAP HANA database #31554
- Do not delegate TRACE to HttpServlet on ERROR dispatch #31457
- Add
properties
setter toProblemDetail
#31430
🐞 Bug Fixes
- GeneratedFiles#addSource does not provide proper context if the specified class name is invalid #31612
- MessageBuilder#createMessage should not define the payload as
@Nullable
#31610 - Default Mixin added by Jackson2ObjectMapperBuilder are missing required runtime hints #31606
- NettyDataBuffer#toByteBuffer fails if readPosition > 0 #31605
- Avoid duplicate JAR resources in
PathMatchingResourcePatternResolver
on MS Windows #31598 NamedParameterUtils
broken parsing related to square brackets #31596- Multipart cleanup is done too eagerly #31567
- Jakarta validation field constraints in superclass are ignored in native image #31552
- Function column out doesn't resolve to
SqlOutParameter
#31550 - Restore support for recursive annotations in Kotlin #31518
- Resolve to empty
MultiValueMap
when no matrix variables are provided #31483 ProxyFactoryBean
declaration may lead to unexpected non-fatal "FactoryBean threw exception from getObjectType" stacktrace output #31473- Use of
@Value
in compact constructor of a record should not register method injection #31433 - Prevent duplicate HTTP server observations for cancelled exchanges #31417
- Spring MVC raises MissingPathVariableException resulting in 500 instead of 400 error when path segment is u001F or u00D and cannot be converted to target type UUID #31382
- Ensure consistent value count in ConcurrentReferenceHashMap#Segment #31373
- HeaderContentNegotiationStrategy.resolveMediaTypes throws unexpected IllegalArgumentException #31254
- Session Cookie in Reactive WebSession is not deleted if maxAge is set through cookie initializer (e.g. via Boot application property) #31214
- DefaultWebClient logs URI without the port number #30519
- CGLIB
BeanCopier
falls back toClassLoader.defineClass
for public target #28699 - BeanUtils.copyProperties() consumes large amount of memory #27246
📔 Documentation
- RestTemplate initialization documentation in 6.0.x mentions Netty, yet no ClientHttpRequestFactory is present in the package. #31526
- Correct typo in annotations.adoc #31519
- Document X-Forwarded-* Headers #31491
- Improve support and documentation for the "default" bean definition profile name #29071
- Document that
pertypewithin
is supported by Spring AOP #25887 - Document alternatives of using multiple
PropertyPlaceholderConfigurer
s [SPR-9989] #14623
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@CrotchBurnt, @GVictorG7, @PiotrFLEURY, @baratrax, @bernie-schelberg-invicara, @huyachigege, @izeye, @lorenzsimon, @martin-lukas, and @rwinch
v5.3.31
⭐ New Features
Log4jLog
needs to re-resolveExtendedLogger
on deserialization (for compatibility with Log4J 2.21) #31583
🐞 Bug Fixes
- MessageBuilder#createMessage should not define the payload as
@Nullable
#31611 - Avoid duplicate JAR resources in
PathMatchingResourcePatternResolver
on MS Windows #31603 - Spring web integration commons fileupload receives files and other parameter uploads, with a null pointer #31564
- Function column out doesn't resolve to
SqlOutParameter
#31560 - Resolve to empty MultiValueMap when no matrix variables are provided #31484
- BeanUtils.copyProperties() consumes large amount of memory #31481
- CGLIB
BeanCopier
falls back toClassLoader.defineClass
for public target #31436 - R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #31411
HibernateJpaDialect
andHibernateExceptionTranslator
throwSQLExceptionTranslator
-provided exception instead of returning it #31410NamedParameterJdbcTemplate
throws unexpected exception fornull
query #31394LazyResolutionMessage
does not implement propertoString
#31385- Illegal reflective access in
ContextOverridingClassLoader.isEligibleForOverriding
#31233
📔 Documentation
- Clarify documentation for
@Transactional
on interfaces #31401 - Default behavior of BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class) inconsistent with code #31349
- Referencing a
@Bean
method in a@Configuration
class'@PostConstruct
method leads to circular reference #31339 - Incorrect reference information about CGLIB supported method visibility #31311
🔨 Dependency Upgrades
- Upgrade to Reactor 2020.0.38 #31584
v6.1.0-RC2
⭐ New Features
- Support
ContextLoader
config in@SpringJUnitConfig
and@SpringJUnitWebConfig
#31498 TypeDescriptor
andResolvableType
cache inGenericTypeAwarePropertyDescriptor
#31490- Consistent
Class
and array matching inResolvableType.isAssignableFrom
#31487 BeanDefinitionRegistryPostProcessor
should declare empty defaultpostProcessBeanFactory
method #31476- Remove support for Protobuf 2.x and protobuf-java-format #31465
- Refine CRaC restoration logs #31462
- Allow repeatable writes in StreamingHttpOutputMessage #31449
- Add support for merging two BeanRegistrationAotContribution instances #31446
- Kotlin BeanFactory.getBean extension fails with nested generic in context #31439
- Log warning and skip resource hint registration for classpath location patterns #31429
- Revisit AOT support for generic constructor argument values #31420
- Add UriBuilderFactoryArgumentResolver. #31413
- Add Coroutines support for
@Cacheable
#31412 PartEvent
API should support limiting the number of file parts #31343- Revise support for quoted identifiers in
SimpleJdbcInsert
#31208 - When configuration class parsing fails, provide more information about the class that triggered the failure #31146
- WebClientResponseException defaults to ISO-8859-1 #31072
- Introduce
@DisabledInAotMode
in the TestContext framework #30834 - Support
TypedStringValue
during AOT processing #29074 - Support ETag generation on ResourceHttpRequestHandler #29031
- Better error reporting for
@Bean
creating when bean instance has been replaced with an incompatible type #28897 - Add Coroutines support for
@EventListener
#28343 - Support "*" catch-all mappings for MockMvc Filter registrations #28041
- Guard against
ConcurrentModificationException
when the response processescommitActions
#27587 - Improve
ControlFlowPointcut
extensibility #27187 - Uploading a too-large file should be a 4xx client error, not a 500 Internal Server Error #27170
- Add special handling of disconnected client errors in ExceptionHandlerExceptionResolver #26181
🐞 Bug Fixes
- ConstructorResolver rejects a candidate if the parameter value is
null
#31495 - 3.2.0-RC1: No primary or single unique constructor found for interface java.util.Set #31488
- Can't link to Spring Framework 6.1.0 release candidate documentation #31480
- In
MockMvc
tests all filters end up with empty-stringfilterName
, breakingOncePerRequestFilter
#31474 <mvc:annotation-driven>
should not instantiate bean property values #31472- Graal VM native image: Substitution target for o.s.o.j.v.Target_BytecodeProvider is not loaded #31452
- JdkClientHttpRequest does not support Content-Length 0 #31451
- Fix typo in
ClassUtils.forName()
#31428 - AOT processing fails to determine proper target for a FactoryBean that produces an array #31426
- BeanDefinitionPropertyValueCodeGenerator#orderForConsistency expects values to be Comparable #31419
- Conversion not applied to
@RequestParam
default value if used for "null after conversion" case #31336 HandlerMethodValidationException.Visitor
incorrectly triggersother()
method instead ofrequestParam()
for@RequestParam
validation errors #31329- AbstractApplicationContext.refresh() leaves bean resources uncleaned when SmartInitializationSingleton throws a non BeansException #28878
📔 Documentation
- Document pattern matching support in
NameMatchMethodPointcut
#31500 - Fix small typo in javadoc #31455
- Expand explanation for the "lite" bean approach #29957
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@OlgaMaciaszek, @bdshadow, @funky-eyes, @izeye, @larsgrefer, and @mmoayyed
v6.1.0-RC1
⭐ New Features
- Enforce REQUIRES_NEW for correct transaction configuration on transactional event listeners #31414
- TestCompiler should allow to configure the Locale that renders compiler messages #31408
- Consistent Object result declarations for JdbcClient's
ResultQuerySpec
#31403 - Move
ReactorResourceFactory
toorg.springframework.http.client
package #31399 - Prevent message resolution after context close #31397
- Handle STOMP messages to user destination in order #31395
- AOT bean registrations miss reflection hints on property fields #31390
- Support Jackson's DatatypeFeature in Jackson2ObjectMapperBuilder #31380
- Allow Filters to be initialized when they're added to MockMvc #31362
- Use schema-based config in sql-error-codes.xml #31354
- Optimize uses of
onErrorResume()
#31352 - AOT bean registrations miss reflection hints on interfaces #31350
SimpleAsyncTaskScheduler
should run fixed-delay tasks on scheduler thread #31334- Allow custom observation convention for
RestClient
#31325 - MockMvcHttpClientConnector support for RequestPostProcessor hook #31298
- Expose
shouldHandle(ApplicationEvent)
inApplicationListenerMethodAdapter
#31295 - Make
ReactorNettyClientRequestFactory
lifecycle-aware #31281 - Add a constructor with externally managed Reactor Netty resources to
ReactorNettyClientRequestFactory
#31280 - Consistent
CannotAcquireLockException
translation for PostgreSQL serialization failure behind JPA #31274 - Simplify
ServerRequestExtensions.queryParamOrNull()
#31264 - Reduce nested class lookups in ClassUtils #31258
- Print JVM restoration time in
DefaultLifecycleProcessor
#31252 - ValueLoaderEntryProcessor should not be created for every call to JCacheCache#get #31250
- Introduce
initialize()
method inAbstractRoutingDataSource
andAbstractRoutingConnectionFactory
#31248 - Add
MappingJackson2MessageConverter
constructors that accept anObjectMapper
#31234 - Eliminate synchronized block to avoid thread pinning in SingletonSupplier #31227
- Add OuputStream BodyInserter #31184
- SseEmitter should format a multiline String #30965
- Suppress logging from HandlerMapping when used for Spring Security's mvcRequestMatcher #30349
- Lenient handling of unencoded URIs in ForwardedHeaderTransformer #30137
- Support DispatcherType.INCLUDE in DefaultServletHttpRequestHandler #30113
- Introduce caching for functional routing #29985
- Log
CglibAopProxy
errors asWARN
instead ofINFO
#29773 - Add CharBufferDecoder #29741
- Provide the HttpRequest on the ClientResponse interface #28397
- Batch update return generated keys #28132
- Allow filters to be registered with MockMvc for particular dispatcher types #27717
- Introduce class-level execution phases for
@Sql
#27285 - Add default methods to
MailSender
andJavaMailSender
as appropriate #23651 - Remove all ApplicationListenerMethodAdapters on context close [SPR-17456] #21988
- Handle STOMP messages from client session in order #21798
- Call
Lifecycle.stop()
for already started beans on failed refresh [SPR-15468] #20028
🐞 Bug Fixes
- Fix regression in JmsAccessor#setSessionAcknowledgeMode #31328
JdbcClient
does not updateKeyHolder
when using positional parameters #31297- AOT bean registrations miss reflection hints on public methods #31293
- DefaultFetchSpec should not buffer results in temporary list buffers #31282
- Missing reflection hint on Publisher for bean destroy methods support #31278
- Missing reflection hint on Eclipse FileLocator #31271
- Missing resource hint for spring.properties #31270
- Missing reflection hints on Kotlin classes for KotlinDetector #31269
- Missing reflection hint on MonetaryAmount in conversion service #31266
- Missing reflection hints for jakarta.inject classes #31259
- ResponseBodyEmitter ignores calls to complete but remains open after JSON write error while sending #30687
- The task in AsyncTaskExecutor throws an exception before execution, and ControllerAdvice will be called twice. #30232
- Suppress deprecation warning for AOT-generated code that refers to a deprecated member #29597
- Avoid duplicate
ApplicationListener
firing (proxy vs. target) #28322 - JCacheCache#putIfAbsent is not atomic #21591
📔 Documentation
- Add Search in all Spring Docs #31290
- Add missing period in RestClient documentation #31237
- Improve wording in Javadoc for
@Autowired
#31235 - Clarify
ClientHttpRequestInterceptor#intercept()
must close response if it throws exception after receiving the response #29751 - Create migration guide from RestTemplate to RestClient #23269
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@JakobFels, @OnlyWick, @StellarStrategist, @aahlenst, @alidandach, @bergander, @bramhaag, @chaewon121, @ctailor2, @e-freni, @esperar, @ghainesii, @hpoettker, @izeye, @joakimmohn, @kang-hl, @kriegaex, @kzander91, @markusheiden, @mdeinum, @qpakzk, @quaff, @ralph-riedel, @runeflobakk, @rwinch, @sephiroth-j, @shin-mallang, @violetbeach, and @vpavic
v6.0.13
⭐ New Features
- Improve diagnostics for negative repeated text count in SpEL #31342
- Improve diagnostics when repeated text size calculation results in overflow in SpEL #31341
UnknownContentTypeException
is notSerializable
#31283- Reintroduce
FastClass
in CGLIB class names for@Configuration
classes #31272
🐞 Bug Fixes
HibernateJpaDialect
andHibernateExceptionTranslator
throwSQLExceptionTranslator
-provided exception instead of returning it #31409- AnnotationScanner scanning leads to StackOverflowError with recursive annotation #31400
NamedParameterJdbcTemplate
throws unexpected exception fornull
query #31391- HTTP server exchange observations have incorrect UNKNOWN status tag if the client disconnected #31388
- Breaking change from 6.0.11 to 6.0.12 if you expect query parameters in
@RequestBody
#31327 - SpEL's
CompoundExpression.toStringAST()
omits?
for null-safe navigation #31326 ConcurrentLruCache
no longer supports capacity = 0 #31317- Using R2dbc transactional and non transactional on a database connection pool will fail for Oracle. #31268
- AOT-generated code no longer set bean class for beans created from a
@Bean
method #31242 - CGLIB proxy classes are no longer cached properly #31238
- Illegal reflective access in
ContextOverridingClassLoader.isEligibleForOverriding
#31232 - Fix RuntimeHintsPredicates matching rules for public/declared elements #31224
- MultipartParser should respect read position #31110
- WebClient reports 'Host is not specified' for URI with hostname and port, but without scheme #31033
- R2DBC Connection is closed during transaction when using TransactionAwareConnectionFactoryProxy #28133
- SpEL cannot evaluate or compile expression with null-safe
void
method invocation #27421 LazyResolutionMessage
does not implement propertoString
#21265
📔 Documentation
- Document Kotlin declaration site variance subtleties #31370
- Add missing
conversionService
field in doc example #31330 - Clarify documentation on Spring Web MVC pattern comparison #31294
- Improved documentation for MethodParameter#getAnnotatedElement #30397
- Javadoc for
BeanPropertyRowMapper.getColumnValue(ResultSet, int, Class)
is inconsistent with code #29285 - Referencing a
@Bean
method in a@Configuration
class'@PostConstruct
method leads to circular reference #27876 - Incorrect reference information about CGLIB supported method visibility #25001
- Clarify documentation for
@Transactional
on interfaces #23538
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
v6.1.0-M5
⭐ New Features
JdbcClient
should reject aList
as the parameter of theIN
clause of an SQL statement when using positional parameters #31215- Support one-time
@Scheduled
tasks #31211 - Deprecate
JOptCommandLinePropertySource
#31207 - Use
MergedAnnotations
API directly inAnnotationBeanNameGenerator
where possible #31203 - Introduce
MethodInvoker
API forTestExecutionListener
s #31199 - Use
Method#isDefault
to find default methods in interfaces #31197 - Refine logic to release WebSocket ByteBuffer via Callback with Jetty 12 #31182
- Make
ReactorClientHttpConnector
lifecycle-aware #31180 - Make
ReactorResourceFactory
lifecycle-aware #31178 - Consolidate HTTP Interface client support for MultipartFile and
@RequestPart
#31164 - Register reflection hints for
@TestPropertySource
factory #31160 - Introduce TaskDecorator variant for Context Propagation #31130
- Introduce reverse methods in AOP MethodMatchers and ClassFilters #26725
- Replace Reactive
awaitSingle()
usages by theMono
variant #31127 - Clarify and log that return value of HandlerMethod is ignored if reason of
@ResponseStatus
present #31121 - Instrument RestClient for Observability #31114
- Attempt to reset Servlet response before calling ExceptionHandlers #31104
- Raise log level to warn when configuration class enhancement cannot apply due to circular reference #31102
- Refine "checkpoint on refresh" error handling #31096
- Deprecate convention-based
@Component
stereotype names in favor of@AliasFor
#31093 - Reinstate support for legacy JSR-250
@javax.annotation.ManagedBean
and JSR-330@javax.inject.Named
annotations #31090 - Look up
@Component
stereotype names using@AliasFor
semantics #31089 - Add
@Nullable
tovalue
inparam()
methods inJdbcClient
#31084 - Ensure direct
@PropertySource
annotations override meta-annotations #31074 - Introduce var-args
params()
method inJdbcClient
'sStatementSpec
#31070 - Introduce overloaded methods in
JdbcTestUtils
that acceptJdbcClient
instead ofJdbcOperations
#31066 - Revise
JdbcTestUtils
method signatures to acceptJdbcOperations
instead ofJdbcTemplate
#31065 - Adapt native support for Hibernate 6.3.0 bytecode provider changes #31051
- Move blocking writeResource operation to boundedElastic #30928
- Move blocking view resolution to boundedElastic #30903
- Support parameter injection in
@BeforeTransaction
/@AfterTransaction
methods #30736 - Introduce
getContentAsString()
inContentCachingRequestWrapper
#30709 - Support configuring Jetty WebSocket server parameters #30344
- Optimize
InlineMap
andInlineList
in SpEL #30251 - Update
Pointcuts
to match getter methods by also excludingvoid
return type #30068 - Improve attribute handling in RequestPredicates #30028
- Add support for JSR-330 and Jakarta
@Inject
for autowiring test constructors #29851 - Optimize initial size in ContentCachingRequestWrapper when contentCacheLimit set #29775
- Optimize Hibernate native footprint by making ByteBuddy unreachable #29549
- Execute preflight checks before interceptors #29509
- Use
Arrays.hashCode(...)
inObjectUtils
#29051 - Improve toString representation of complex parameters in SimpleKey #27670
- Propagate
CoroutineContext
inCoWebFilter
#27522 - Add ParameterNamesModule to "well known" jackson modules #27511
- Optimize for single TransactionSynchronization #27335
- Improve performance of
CompositePropertySource#getPropertyNames
#27236 - Avoid calling executeBatch() with 0 batch size #27154
- Add maxAttempts to ExponentialBackOff #27071
- Spring Webflux: CoRouterFunctionDsl should expose the used CoroutineContext #27010
- spring-webflux filters don't pass CoroutineContext #26977
- Support declarative
ContextCustomizer
registration in the TestContext framework #26148 - Improve SpEL inline collection caching #25921
- Use Comparable instead of dedicated implementations #25478
- Support method injection when
@Autowired
(require=false) is used on mixed nullability args #24773 - Add factory method to create a NamedThreadLocal with an initial value #24705
- CglibAopProxy: Skip non-overridden methods of Object.class as those which for sure have no advice #24649
- Add conversion support for Pattern/Regex #24311
- Support quoted identifiers in
SimpleJdbcInsert
#24013 - Add composite for TaskDecorator #23692
- Spring AOP is not compatible with Kotlin Coroutines #22462
- Added Basic Authorization for UrlResource #1822
- Allow component name to be specified in
@ControllerAdvice
[SPR-16566] #21108 - MethodValidationInterceptor support for Mono and Flux method parameters #20781
- Support validating collection of objects on web controller method #16917
🐞 Bug Fixes
- AOT check on a bean definition with an instance supplier is not consistent #31200
- Pass correct
SqlParameterSource
toNamedParameterJdbcTemplate
inDefaultJdbcClient
#31195 - Various methods in
SimpleJdbcInsert
prevent method chaining #31177 - Client observations URI template missing when using RestTemplateAdapter #31144
- Validator resolution can no longer be lazy #31137
- Make the JdbcClient method update(KeyHolder generatedKeyHolder) work with positional parameters [#31122](https://github.com/spring-projects/sp...