Releases: spring-projects/spring-framework
v5.3.29
⭐ New Features
- Avoid illegal reflective access in ContextOverridingClassLoader.isEligibleForOverriding #30868
- Improve diagnostics for CGLIB ClassLoader issues with shared classes in parent ClassLoader #30866
JdbcTemplate
does not callhandleWarnings
in case of exception #30852- Tolerate
AnnotationUtils.isCandidateClass
call withnull
as annotation type #30843 - Simplify
DefaultSingletonBeanRegistry.isDependent()
#30841 - Provide explicit support for collections, maps, and arrays in
ObjectUtils.nullSafeConciseToString()
#30811 - Extend list of supported types in
ObjectUtils.nullSafeConciseToString()
#30806 - Align ConcurrentMapCacheManager locking behavior with CaffeineCacheManager #30781
ResolvableType.hasUnresolvableGenerics()
should cache its result #30715- Ensure Spring
LogFactory
contains all public methods from ApacheLogFactory
#30711 - Translate SQL Exception with State S0001 and Vendor Code 2628 to a Spring Exception in MSSQL 2019 #30682
🐞 Bug Fixes
- For a prototype bean, if first-time rejected value is null, subsequent value will wrongly be null always #30809
- Revert changes to
toString()
inFieldError
#30800 - Fix log level on error with
@TransactionalEventListener
#30784 - SerializableTypeWrapper does not consistently catch InvocationTargetException #30767
- NPE in MvcUriComponentsBuilder with no-arg target method on interface #30757
Jackson2ObjectMapperBuilder
breaks whenmodules
customizer followsmodulesToInstall
#30752- Spring ORM SpringBeanContainer when trying to create a bean fails with not found bean definition, and fallbacks to default hibernate bean creation #30685
📔 Documentation
- ResultSet holdability into the View layer broken by Hibernate 5 #30863
- Clarify
ReactiveTransactionManager
exception declarations #30819 - Doc:
JdbcTransactionManager
vsDataSourceTransactionManager
#30814
🔨 Dependency Upgrades
- Upgrade to Reactor 2020.0.34 #30873
v5.2.25.RELEASE
v6.1.0-M1
⭐ New Features
- Consistent simple value type check (including UUID treatment for data binding) #30664
- Release shared JMS Connection when message listener container is stopped #30612
- Property-driven onRefresh checkpoint during application context bootstrap #30606
- Support letters other than A-Z in identifiers in SpEL expressions #30580
- Remove System.out calls in PreComputeFieldFeature #30571
- Have the ErrorResponse.Builder take in a custom ProblemDetail instance #30568
- Allow setting the ProblemDetail.type via a MessageSource #30566
- ClientHttpRequestFactory based on Jetty HttpClient #30564
- Remove buffering in ClientHttpRequestFactory implementations #30557
- Support JAXBElement in Jaxb2XmlEncoder #30552
- Disable SpEL selector support in WebSocket messaging by default #30550
- Enforce JPA bootstrap failure for incomplete Hibernate Validator setup #30549
- Support parsing
long
dates inInstantFormatter
#30546 - Port BeanPropertyRowMapper and DataClassRowMapper for r2dbc #30530
- Add non-null precondition checks in
DefaultEntityResponseBuilder
#30433 - Deprecate spring-context-indexer #30431
- Update
RuntimeHintsAgentPlugin
to use the native image code path #30422 - HTTP interface client should not have blockingTimeout set and leave it to the underlying client by default #30403
- Improve
toString()
forProfiles.of()
implementation #30374 - Add ReloadableResourceBundleMessageSource Resource selection hook #30369
- Optimize DefaultLifecycleProcessor::stopBeans #30361
- Deprecate
AutowireCapableBeanFactory.createBean(Class, int, boolean)
for consistent usage ofcreateBean(Class)
#30345 - Support
setCharacterEncoding(null)
inMockHttpServletResponse
#30341 - Add support for converting a String to an Instant #30312
- Refine
RouterFunctionMapping
ordering consistency #30278 - CRaC Resource adapter for bean lifecycle in application context #30242
- Configuration options for virtual threads #30241
- Support for SequencedCollection/Set/Map #30239
- MethodArgumentNotValidException::errorsToStringList should include only the resolved message when MessageSource is used #30198
- Support
@XmlSeeAlso
in Jaxb2XmlDecoder #30167 - Add SpEL support for registered MethodHandles #30045
- Add test support to record async events, with JUnit Jupiter caveat #30020
- Returning a
CompletableFuture.failure()
from an async, transactional method should mark the transaction as roll back #30018 - Support
@Scheduled
on Reactive methods and Kotlin suspending functions #29924 - Compatibility with JVM checkpoint restore (OpenJDK's Project CRaC) #29921
Validator
factory methods withBiConsumer
#29890- Spring MVC and WebFlux method validation support that also adapts
ConstraintViolation
s #29825 - Remove LocalVariableTableParameterNameDiscoverer #29559
- Avoid use of
java.net.URL
constructors #29481 - Creating relative resource for URL resource should create relative Resource even if relative path has URL in it #28522
- ModelAttributeMethodArgumentResolver does not support custom field binding for immutable objects #28284
- ConcurrentTaskScheduler and ConcurrentTaskExecutor can create an executor with no way to shut it down #27914
- R2DBC ConnectionFactory bean
.close()
method should be called/subscribed when available #26991 - org.springframework.web.servlet.mvc.method.annotation.ReactiveTypeHandler does not handle vendor-specific application/x-ndjson media types #26817
- Improve the experience of handling validation errors in controller methods #26219
- Compatibility with virtual threads (OpenJDK's Project Loom) #23443
- Avoid repeated attempts to load a failing
ApplicationContext
in the TestContext framework [SPR-9548] #14182
🐞 Bug Fixes
- Retain profiles used when running AOT #30421
- Automatic context propagation stops working after an error occurs #30013
📔 Documentation
- Introduce JVM checkpoint/restore support documentation #30647
- Fix link in Javadoc of
PassThroughFilterChain
#30365 - Clarify behavior of the Elvis SpEL operator in documentation #30352
- Fix link to releases feed #30340
🔨 Dependency Upgrades
- Upgrade to Jackson 2.15 #30665
- Upgrade to Kotlin 1.8 #29754
- Upgrade to Kotlin Coroutines 1.7 #30514
- Upgrade to Kotlin Serialization 1.5 #30515
- Upgrade to SnakeYAML 2.0 #30048
❤️ Contributors
Thank you to all the contributors who worked on this release:
@OlgaMaciaszek, @RemusRD, @aooohan, @asomov, @izeye, @jstansel, @kzander91, @luohongtu, @making, @rwinch, and @srivatsa-cfp
v6.0.10
⭐ New Features
- ClassLoader can be null in DeserializingConverter and should be annotated with
@Nullable
#30670 - Introduce
TestExecutionListener
for Micrometer'sObservationRegistry
in the TestContext framework #30658 - Add missing hint for
ResourceEditor
#30628 - Add missing hint for converting String to URI #30627
- Redesign inner Pointcut implementations as standalone classes #30621
- Add missing
@Nullable
in DefaultJmsListenerContainerFactory #30620 - Handle custom JMS acknowledgment modes as client acknowledge #30619
- Declare Advisor#isPerInstance() as default method #30614
- Improve error message for unsupported character in SpEL expression #30602
- Multipart data is always read irrelevant of handler response #30590
- Performance optimization in AbstractBeanFactoryBasedTargetSource.hashCode() #30576
- Log a warning when
commons-logging
is in the classpath #30575 - Always use
MethodArgumentNotValidException(MethodParameter, BindingResult)
constructor #30558 - Remove non-empty filename check in
ContentDisposition
builder #30537 - Add missing
EntityManagerFactory
hints forSharedEntityManagerCreator
#30523 - Disable Hibernate reflection optimizer with native #30521
- Introduce a method in
MockHttpServletRequestBuilder
to set remote address #30497 - Skip class transformer in
PersistenceUnitInfoDescriptor
for native images #30492 @Bean
'lite' mode not supported if@Bean
methods are not declared locally #30449- Align HibernateJpaVendorAdapter with Hibernate ORM 6.2 #30288
- Add nested propagation support to R2dbcTransactionManager #30134
🐞 Bug Fixes
- Cron expression scheduling might be triggered 1 millisecond earlier #30666
- Change of behaviour for UUID in bean validation output in v5.3.27 #30661
- Test context cache stats are not logged when
ApplicationContext
fails to load #30635 - Inconsistent ProxyCallbackFilter#equals/hashCode methods in CglibAopProxy #30615
- SpEL's
CompoundExpression.toStringAST()
incorrectly includes.
for indexed properties #30610 - NPE in
ReactiveTransactionSupport.unwrapIfResourceCleanupFailure
#30597 - CollectionFactory.createMap(HashMap.class, 0) now returns a LinkedHashMap rather than a HashMap #30596
- ThreadLocalTargetSource does not include actual target bean name in NamedThreadLocal #30581
- ApplicationListenerMethodAdapter inconsistently publishes events from CompletableFuture #30578
- Unsupported SQL type: TIMESTAMP_WITH_TIMEZONE when using OffsetDateTime with MySQL #30556
- SpringBeanContainer not called with Hibernate ORM 6.2 #30545
- WebFlux returns 406 instead of RFC 7807 response for subtype of ProblemDetail #30533
- HTTP Interface client cannot send URI query parameter with multipart request #30520
- Transaction isolation level not working with R2dbcTransactionManager #30508
- Support for AOT processing with GraalVM tracing agent is not consistent #30511
- For
@Bean
method that returnsnull
,@Autowired
injectsNullBean
instead ofnull
for cached arguments #30485 - MediaType property binding issue in native builds #30491
- InjectionMetadata AOT contributions do not check for existing property value #30476
- Spring Framework 6.0.8 appears to cause issues in OSGi environment #30389
- Empty
@RequestMapping
method should match both "" and "/" consistently #30293 - EclipseLinkJpaDialect: Unexpected default isolation levels #29997
- Memory leak with CglibAopProxy$ProxyCallbackFilter #26266
📔 Documentation
- Fix markup issue in Javadoc of QuartzCronField #30646
- Document
@DirtiesContext
semantics when declared at the class level and method level #30623 - Add missing Javadoc for
RegisteredBean.resolveAutowiredArgument()
#30609 - Fix invalid link in transaction resources #30570
- FileSystemUtils::deleteRecursively Javadoc refers to File instead of Path #30554
- Improve Javadoc for
ExchangeFilterFunction
#30543 - Update Javadoc and reference doc for WebMvcConfigurer to mention Boot's HttpMessageConverters #30538
- Add Javadoc since to InjectedElement.shouldInject() #30512
- Fix wording in r2dbc Statement Filters section of ref docs #30482
- Typo in Spring official documentation #30473
- Link for
@javax.annotation.Nonnull
is wrong in Javadoc for Spring's@NonNull
#30455 - Improve how the build deals with javadoc invalid references #30428
- Docs: Remove duplicate in SpEL feature list #30404
- Document which
@Scheduled
attributes support SpEL expressions #29290
🔨 Dependency Upgrades
- Upgrade to
micrometer-bom
1.10.8 andcontext-propagation
1.0.3 #30657 - Upgrade to Reactor 2022.0.8 #30655
❤️ Contributors
Thank you to all the contributors who worked on this release:
@Foolkin, @anyuruf, @galingerv, @izeye, @jmewes, @kihyuk-sung, @leewin12, @marcingrzejszczak, @rweisleder, @rwinch, @scordio, @ssang1105, and @vpavic
v5.3.28
⭐ New Features
- ClassLoader can be null in DeserializingConverter and should be annotated with
@Nullable
#30672 - Performance optimization in AbstractBeanFactoryBasedTargetSource.hashCode() #30585
- Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30441
- Reject null and empty SpEL expressions #30373
- Introduce
Environment.matchesProfiles()
for profile expressions #30226
🐞 Bug Fixes
- Change of behaviour for UUID in bean validation output in v5.3.27 #30662
- Spring Framework 5.3.27 appears to cause issues in OSGi environment #30637
- Inconsistent ProxyCallbackFilter#equals/hashCode methods in CglibAopProxy #30616
- EclipseLinkJpaDialect: Unexpected default isolation levels #30589
- ThreadLocalTargetSource does not include actual target bean name in NamedThreadLocal #30586
- ApplicationListenerMethodAdapter inconsistently publishes events from CompletableFuture #30584
- For
@Bean
method that returnsnull
,@Autowired
injectsNullBean
instead ofnull
for cached arguments #30551 - Make maximum SpEL expression length configurable #30446
- Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30443
📔 Documentation
- Document which
@Scheduled
attributes support SpEL expressions #30642 - FileSystemUtils::deleteRecursively Javadoc refers to File instead of Path #30555
🔨 Dependency Upgrades
- Upgrade to Reactor 2020.0.33 #30656
v6.0.9
⭐ New Features
- Consistent support for MultiValueMap and common Map implementations in CollectionFactory #30440
- Introduce internal constants for implicit bounds in TypeUtils #30423
- Update major/minor version properties in
MockServletContext
#30395 - Reject null and empty SpEL expressions #30371
- Support Test AOT processing with GraalVM tracing agent and Native Build Tools #30281
- Introduce
Environment.matchesProfiles()
for profile expressions #30206 - Optimize MultiValueMap iteration operations #29972
🐞 Bug Fixes
- Respect TaskDecorator configuration on DefaultManagedTaskExecutor #30442
- Qualifiers registered programmatically are not supported by AOT #30410
- Support for
InjectionPoint
in bean factory methods when using AOT #30401 - Bean methods with generic array/varargs parameters break native compilation #30407
ApplicationListenerMethodAdapter
supports non-matching generic events #30399- Processing several
@PersistenceContext
injection points on the same class with AOT generates code that does not compile #30437 - Make maximum SpEL expression length configurable #30380
- Record beans do not compile to native images #30383
- Missing resource hint for
@PropertySource
#value #30376 - ApplicationEventPublisher - PayloadApplicationEvent not received by EventListener if event fired from child context #30360
- StringDecoder.decode() should release chunks on cancellation #30299
- Quote '?' in Quoted Printable filename #30252
- Missing reflection hint for custom
PropertySourceFactory
in native image #30175 - Aot generated sources fail to compile with 'File name too long' error #29846
📔 Documentation
- Update
package-info
for CGLIB fork #30461 - Clarify differences between GenericBeanDefinition and RootBeanDefinition #30444
- Document how to configure FactoryBean with a configurable target with AOT #30434
- Add Antora docs-build branch #30415
- Switch the reference documentation to Antora #30414
@ResponseStatus
documentation incorrect #30305
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@divcon, @izeye, @luozhenyu, @rwinch, @sigee, and @yuzawa-san
v6.0.8
⭐ New Features
- Disable variable assignment in SimpleEvaluationContext #30326
- Limit SpEL expression length #30325
- Limit string concatenation in SpEL expressions #30324
- Introduce
StringUtils.truncate()
#30290 - Introduce
ObjectUtils.nullSafeConciseToString()
#30286 - Introduce assertions against
Cookie
attributes inCookieResultMatchers
forMockMvc
#30285 - Polishing #30267
- Support
SameSite
cookie attribute inMockMvcHttpConnector
#30264 - Update
MockCookie
to make use of Servlet 6.0 APIs and semantics for "attributes" #30263 - Refine
initRequestBuilder
inDefaultWebClient
#30254 - HttpServerErrorException contains not-serializable field of type DefaultResponseErrorHandler #30224
- Add class hints for Jackson annotations on fields and methods #30208
- Add
HttpMethod
reflection hint toObjectToObjectConverterRuntimeHints
#30201 - Improve performance of canRead() in HttpMessageReader's #30192
- Optimize array creation in SpEL
ConstructorReference
#30189 - ConstructorResolver error hints about mixing indexed and named args #30169
- Replace
Collections.unmodifiableList(new ArrayList(..))
withList.copyOf()
#30166 - Add assert null validations for DefaultServerResponseBuilder #30157
- Use
InputStream.readAllBytes()
inFileCopyUtils.copyToByteArray()
#30155 - Cache ServerHttpRequest::getMethod in AbstractServerHttpRequest #30139
- Use String.equals() in LiteralPathElement #30138
- Optimize some iterations in BodyExtractor and BodyInserter #30136
- Add a couple missing java.time types to StatementCreatorUtils #30123
- WebClient observations should not record CANCEL signals as aborted if response was received #30070
- Destroy method not found in native image if concrete bean type is not exposed #29545
- Contribute init/destroy lifecycle introspection hints for registered beans #29246
🐞 Bug Fixes
- NPE thrown for nonexistent
default-destroy-method
in XML config #30301 - Fix comparison of
title
inequals()
andhashCode()
ofProblemDetail
#30294 - SSE breaks with indenting serializer in WebMvc.fn #30277
@HttpExchange
interface does not resolve return type correctly while using with suspending methods #30266- Increase max regex length in SpEL expressions #30265
- Missing response information from client observation context when filter functions fail #30247
- NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30245
- Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30220
- Refine generic type management in
AbstractMessageWriterResultHandler
#30214 - MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30210
- Encode IPV6 Zone IDs (%) in ReactorServerHttpRequest #30188
- Handle all exceptions for stored proc output param retrieval in
SharedEntityManagerCreator
#30161 - Fix IllegalArgumentException that prevents STOMP DISCONNECT from reaching the client #30120
- TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30115
📔 Documentation
- Add since tags to sameSite() and attribute() in CookieResultMatchersDsl #30308
- Fix incorrect jakarta.inject artifact version #30270
- Fix
@PathVariable
reference documentation code snippets #30243 - Use diamond operator in examples in reference manual #30204
- Fix example in Javadoc for
@EnableWebSocket
#30183 - Fix anchor in link to "Web on Reactive Stack" chapter #30158
- Documentation for Vavr's Try method to trigger transaction rollbacks #30108
- Document that WebClient defaultStatusHandler do not apply to exchange* methods #30059
🔨 Dependency Upgrades
❤️ Contributors
Thank you to all the contributors who worked on this release:
@1993heqiang, @TAKETODAY, @ZouHongxue, @alexjansons, @divcon, @edyda99, @filipblondeel, @ghostg00, @giuseppemilicia, @izeye, @justin-tay, @krzyk, @kyuarl21, @quaff, @shitian9, @simonbasle, @srivatsa-cfp, @ssang1105, @stsypanov, @wizard4wu, and @yuzawa-san
v5.3.27
⭐ New Features
- Limit string concatenation in SpEL expressions #30331
- Limit SpEL expression length #30329
- Disable variable assignment in SimpleEvaluationContext #30327
- Introduce
StringUtils.truncate()
#30291 - Introduce
ObjectUtils.nullSafeConciseToString()
#30287 - Make
HttpComponentsHeadersAdapter#getFirst
nullable #30269
🐞 Bug Fixes
- Fix regression in ReactorServerHttpRequest related to IPV6 Zone id with "%" #30314
- SSE breaks with indenting serializer in WebMvc.fn #30302
- Increase max regex length in SpEL expressions #30298
- NullPointerException on timeout in HttpComponentsClientHttpConnector when using Apache HttpComponents #30246
- Wrong MockRestRequestMatchers.header() method in spring-test being invoked (JDK issue?) #30235
- TypeNotPresentException: org/springframework/cglib/proxy/NoOp not present on Java 17 #30228
- Refine generic type management in
AbstractMessageWriterResultHandler
#30215 - MvcUriComponentsBuilder.fromMethodCall breaks for controller with CharSequence return type #30212
- Handle all exceptions for stored proc output param retrieval in
SharedEntityManagerCreator
#30164
📔 Documentation
- Fix
@PathVariable
reference documentation code snippets #30258 - Fix example in Javadoc for
@EnableWebSocket
#30187 - Fix anchor in link to "Web on Reactive Stack" chapter #30163
🔨 Dependency Upgrades
- Upgrade to Reactor 2020.0.31 #30315
v5.2.24.RELEASE
v6.0.7
⭐ New Features
- Improve diagnostics in SpEL for
matches
operator #30144 - Improve diagnostics in SpEL for repeated text #30142
- Increase scope of regex pattern cache for the SpEL
matches
operator #30140 - Minor updates in HandlerMappingIntrospector #30127
- Skip parameter name resolution when not needed in
AbstractAutowireCapableBeanFactory
#30103 - Remove extra copy of headers/cookies in WebClient #30092
- Assert non-null arguments in
DefaultServerRequestBuilder
methods #30046 - Jetty 12 support in WebFlux #29575
🐞 Bug Fixes
- Gradle task
processAot
fails when Bean Validation API present but no provider found #30130 - ContentDisposition::parse does not support Windows paths #30111
- BindException raised instead of MethodArgumentNotValidException subclass #30100
- Ensure reactive transaction rollback on commit error #30096
- CaffeineCacheManager getCache method cause thread block #30066
- RequestedContentTypeResolver does not ignore quality factor when filtering */* media types #29915
@Autowired
/@Value
does not work on inner bean in native #29803- Avoid rollback after a commit failure in
TransactionalOperator
#27572 - SpEL: cannot call methods declared in
java.lang.Object
on a JDK proxy #25316
📔 Documentation
- Add anchor rewrites in the reference documentation #30132
- Fix minor spacings in webflux docs #30078
- Add a list of observations produced by Spring Framework #30060
🔨 Dependency Upgrades
- Upgrade to Reactor 2022.0.5 #30133
❤️ Contributors
Thank you to all the contributors who worked on this release:
@EnricSala, @MrCoffee77, @abelsromero, @edyda99, @liupeng12345, @srivatsa-cfp, and @yuzawa-san