Releases: spring-projects/spring-framework
Releases · spring-projects/spring-framework
v5.1.17.RELEASE
⭐ New Features
- Defer creating logger in StandardWebSocketHandlerAdapter #25433
- Unnecessarily alarming stack trace logged during scheduler resolution #25416
- MutablePropertySources will not find or remove proxied sources #25406
- Profiles should be comparable when created via Profiles.of() #25363
🪲 Bug fixes
- UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25424
- DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #25421
- Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25417
- MappingJackson2HttpMessageConverter might be too specific in its Charset support #25343
- ServerHttpRequest.getSslInfo() always returns null for reactor-netty HTTP/2 requests #25286
- NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25267
- AbstractJackson2HttpMessageConverter - Check for encoding breaks JSON to POJO de-serialization experience #25252
- The AbstractTemplateViewResolver class is not abstract #25241
📔 Documentation
- Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25403
- Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25233
🔨 Dependency upgrades
- Upgrade to Reactor Californium-SR20 #25412
v5.0.18.RELEASE
⭐ New Features
- Defer creating logger in StandardWebSocketHandlerAdapter #25434
- Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25220
- Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25218
🪲 Bug fixes
- UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25425
- DefaultListableBeanFactory.getBean(Class) may throw NoSuchBeanDefinitionException when removeBeanDefinition is being called simultaneously to remove an unrelated bean #25422
- Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25418
- NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25268
- The AbstractTemplateViewResolver class is not abstract #25242
- MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25226
- WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25224
- Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25222
📔 Documentation
v4.3.28.RELEASE
⭐ New Features
- Defer creating logger in StandardWebSocketHandlerAdapter #25435
- Alignment of CORS default values with 5.x #25414
- Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25221
- Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25219
🪲 Bug fixes
- UriComponentsBuilder.cloneBuilder() cause sharing query parameters between builders #25426
- Oracle LOB segments holding TEMP space after executing SP using SimpleJdbcCall with SqlParameterSource #25419
- NoRollbackFor rule causes TransactionAspectSupport to log unwarranted "exception overridden" error on WebSphere #25269
- The AbstractTemplateViewResolver class is not abstract #25243
- MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25227
- WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25225
- Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25223
📔 Documentation
v5.3.0-M1
⭐ New Features
- Use @SafeVarargs in Jackson builder and factory #25311
- Use JDBC 4 API for connection validation #25305
- Reduce String creation in BeanPropertyRowMapper #25301
- Align DispatcherServlet defaults for Java and XML #25260
- Make DispatcherServlet.properties loading lazy #25257
- Rollback reactive transaction on cancel #25256
- Support multi-value X-Forwarded-Prefix headers #25254
- Refactor method name dispatching to switch statements in AutowireUtils #25199
- Disable and remove unsupported features from native images #25179
- Refactor method name dispatching to switch statements #25170
- Refactor method name dispatching to switch statements #25163
- Provide a flag to disable SpEL support #25153
- Provide a flag to disable XML support #25151
- Allow customization of JPA EntityManager before use #25125
- Make use of HttpServletMapping when available #25100
- Add support for R2DBC #25065
- Support configurable timeout in @transactional #25052
- Use same default ClassLoader in SpringFactoriesLoader #24992
- SpringFactoriesLoader should filter out duplicates #24985
- DefaultResourceLoader's default constructor makes it easy to introduce a ClassLoader leak #24957
- Reject "/path/**/other" patterns in PathPatternParser #24952
- Support for PathPatternParser in Spring MVC #24945
- Introduce ClientHttpConnector test suite #24941
- Add file parameters as request parts in HtmlUnitRequestBuilder #24926
- BeanNameAutoProxyCreator proxies the wrong beans when custom TargetSourceCreator specified #24915
- Expose multipart data in ServerRequest #24909
- VersionResourceResolver should use weak ETags to allow for HTTP compression #24898
- Extend transaction attributes with labels #24890
- Avoid using regex matching for static patterns #24887
- Align TransactionManagementConfigurer support in TestContext framework with production #24869
- Add Encoder and Decoder for Netty ByteBuf #24866
- Allow setting SerializationInclusion with JsonInclude.Value #24824
- ObjectProvider.ifAvailable throws exception for scoped bean without an active scope #24822
- Wrap XMLStreamException in DecodingException #24778
- Improve MediaType parsing performance #24769
- Add BeanPostProcessors in bulk #24756
- Integrate Apache Http client with WebClient #24700
- Improve performance of AbstractAutowireCapableBeanFactory#predictBeanType #24681
- Improve efficiency of mutating of ClientHttpResponse and ServerHttpRequest #24680
- Support user-defined key type in JDBC KeyHolder #24655
- PartsHttpMessageWriter introduced #24535
- Support URI templates in RequestEntity #24406
- Allow re-initialization of DataBinder to and from direct field or bean property access #24347
- Add support for metadata push to RSocketRequester #24322
- Support setting spring.test.constructor.autowire.mode via junit-platform.properties file #24285
- Honor generic type information in BeanUtils.copyProperties() #24281
- Fix behavior in ExceptionHandlerExceptionResolver.setResponseBodyAdvice #24204
- Support for RxJava 3 #24170
- Add Nullable to Joinpoint and MethodInterceptor #24117
- DataSourceTransactionManager does not consider SQLExceptionTranslator on commit #24064
- Turn off useSuffixPatternMatching by default #23915
- Support matching against multiple header values in HeaderAssertions #23878
- Multipart request support in MockRestServiceServer #23772
- Enhanced form data request support in MockRestServiceServer #23671
- Add support for X-Forwarded-For and Forwarded for #23582
- @ExceptionHandler to keep nesting beyond the first cause #23380
- Support separate annotation introspectors in Jackson2ObjectMapperBuilder #23017
- Improve GraalVM native support #22968
- Provide access to the WebSocket close status in WebFlux #22079
- Make WebFlux multipart support fully Reactive [SPR-17122] #21659
- Add iterable JDBC template to process large amount of data [SPR-13900] #18474
🪲 Bug fixes
- AllEncompassingFormHttpMessageConverter now uses both JAXB and Jackson by default #25291
- Align @RequestPart support in WebFlux with Spring MVC #22973
📔 Documentation
- Fix obsolete link in Kotlin docs #25192
- Switch to googlecode theme for syntax highlighting in reference manual #24865
- fix WebRequest.checkNotModified docs #1035
🔨 Dependency upgrades
- Upgrade to Gradle 6.5 #25180
- Upgrade to Reactor 2020.0.0 M1 #25085
- Upgrade to Dom4j 2.1.3 and Jaxen 1.2.0 #25078
- Upgrade to Gradle 6.4 #25020
- Upgrade to ASM 8.1 #24872
- Upgrade to TestNG 7.1.0 #24298
- Upgrade to Groovy 3.0 #24215
- Upgrade to JUnit 4.13 #22894
❤️ Contributors
We’d like to thank all the contributors who worked on our current release!
v5.2.7.RELEASE
⭐ New Features
- Implement reliable invocation order for advice within an
@Aspect
#25186 - Performance enhancement in execution of ResponseEntity.of() #25183
- Support for shared GroovyClassLoader in GroovyScriptFactory #25177
- Suggest making a Set.size() > 0 judgement for AbstractApplicationContext.earlyApplicationEvents #25161
- Make use of custom types configurable in YamlProcessor #25152
- Avoid need for default constructor in ContextAnnotationAutowireCandidateResolver subclasses #25131
- ConstructorResolver.resolveConstructorArguments() return value issue #25130
- Introduce serializeToByteArray/deserializeFromByteArray convenience methods #25117
- Custom HTTP Method on MockServerHttpRequest #25109
- Missing null checks in AbstractMessageChannel.addInterceptor/setInterceptors #25088
- Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25081
- Simplify use of HttpContext in HttpComponentsClientHttpRequestFactory in support of user associated connections #25066
- ResolvableType forClass fails when a type in the generic signature isn't present #25064
- Include timeout unit in shutdown failure logging #25058
- Drop unnecessary intermediate StringBuilder.toString() call in ServerSentEventHttpMessageReader #25024
- Fix concurrency issues in XStreamMarshaller #25017
- Introduce mechanism to discover whether a reactive type registered in ReactiveAdapterRegistry uses deferred computation #24995
- Avoid logging exception for closed session in AbstractSockJsSession #24986
- Include response body in RestTemplate exception when there is no suitable HttpMessageConverter #24964
🪲 Bug Fixes
- ExchangeStrategies custom codec's reader & writer are not registered #25149
- MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25140
- WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25132
- Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25110
- DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25106
- Fix race condition in WriteResultPublisher between subscription and error in publishError #25096
- Jackson message converters and codecs do not respect character encoding in canRead/canWrite #25076
- DefaultClientResponseBuilder empty logPrefix when creating a DefaultClientResponse based on another #25069
- HttpHeaders equals may return false without comparing actual content #25034
- Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #24989
📔 Documentation
- Javadoc for hibernate5 OpenSessionInViewFilter mentions FlushMode.NEVER #25158
- Document that the Map backing a MapPropertySource should not contain null values #25142
- Javadoc for JdbcOperations.batchUpdate should mention that negative values are possible #25138
- Fix URI pattern example in webflux.adoc #25137
- Document how reactive transactions work for cancellation in 5.2 and how it will work in 5.3 #25091
- Document whether code can rely on specific subclasses of HttpClientErrorException/HttpServerErrorException being thrown from DefaultResponseErrorHandler #25067
- Fix SpelEvaluationException with example code #25045
- javadoc: remove a comment documented a limitation on
@Lookup
annotation #25044 - Document all predefined variables from ApplicationContext available in SpEL expressions #25037
- Document ReactiveTransactionManager support in reference manual #25036
- Document ReactiveTransactionManager support #25030
- Change to placeholder value in XML is not reevaluated at runtime #25022
- Add missing
@PathVariable
declarations in examples in webmvc.adoc #25006
🔨 Dependency Upgrades
- Upgrade to Reactor Dysprosium-SR8 #25210
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.1.16.RELEASE
⭐ New Features
- Performance enhancement in execution of ResponseEntity.of() #25197
- Support for shared GroovyClassLoader in GroovyScriptFactory #25181
- Make use of custom types configurable in YamlProcessor #25154
- Missing null checks in AbstractMessageChannel.addInterceptor #25089
- Avoid full synchronization in AbstractRefreshableApplicationContext.getBeanFactory() since it can lead to massive thread blocking #25083
- Fix concurrency issues in XStreamMarshaller #25026
- Avoid logging exception for closed session in AbstractSockJsSession #25003
🪲 Bug Fixes
- AbstractJackson2HttpMessageConverter does not respect character encoding in canRead/canWrite #25185
- ExchangeStrategies custom codec's reader & writer are not registered #25150
- MultiValueMapAdapter.getFirst fails with IndexOutOfBoundsException in case of empty List #25141
- WebSphereUowTransactionManager causes exception for PROPAGATION_SUPPORTS when timeout is specified #25135
- Avoid ClassCastException on IllegalArgumentException when invoking sync get cache method #25118
- DefaultServerRequestBuilder does not respect attributes when building the ServerRequest #25107
- Fix race condition in WriteResultPublisher between subscription and error in publishError #25102
- HttpHeaders equals may return false without comparing actual content #25035
- Fix race condition in WriteResultPublisher between subscription and completion in publishComplete #25004
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR19 #25211
v5.2.6.RELEASE
⭐ New Features
- Cache meta-annotations for stereotype check in AnnotationBeanNameGenerator #24980
- Use WebsocketServerSpec in ReactorNettyRequestUpgradeStrategy #24959
- Warn about unsupported "/path/**/other" patterns with WebFlux PathPatternParser #24958
- Allow override of data binding in ModelAttributeMethodArgumentResolver #24947
- Rid pointless wrapping with BufferedInputStream from class reading #24946
- ResponseStatusExceptionResolver ignores ResponseStatusException headers #24944
- Caching of autowire candidate metadata for lazy beans #24904
- Put a limit on the size of DefaultSingletonBeanRegistry#suppressedExceptions #24902
- Prevent setting parent bean factory to self #24900
- Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24871
- Improve performance of StringUtils.deleteAny() #24870
- 'args' argument of 'JdbcTemplate#query(String, Object[], RowCallbackHandler)' method should be marked
@Nullable
#24839 - Improve usage of ByteArrayOutputStream/ByteArrayInputStream #24805
- Simplify conversion of ByteArrayOutputStream to String #24785
- Optimize sortPostProcessors() in PostProcessorRegistrationDelegate #24776
- Reduce byte array allocations in StompEncoder #24694
🪲 Bug Fixes
- ConflictingBeanDefinitionException on repeated index evaluation #24978
- Reintroduce synthesized annotation attribute value caching #24970
- MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24916
- Memory leak in MimeTypeUtils LRUCache #24886
- Annotation searches potentially synthesize annotations unnecessarily #24861
- Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24853
- DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24852
- Cannot dispatch without an AsyncContext when an expected error is thrown #24835
- Duplicate Vary headers after enabling CORS filter #24829
- Make it possible to run Spring MVC without kotlin-reflect #24828
- Recursively copy directory with symbolic link #24823
- Connection leak with WebClient retrieve().toBodilessEntity() #24788
- Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24782
- Fix empty domain handling in ResponseCookie #24758
- Illegal reflective access warning for interface-based lookup method injection #24657
- Annotation retrieval performance degradation after 5.2 #23905
📔 Documentation
- HttpHeaders#getETagValuesAsList(String) does not document IAE #24950
- Describe that bean disposal is unsupported for the beans created by FactoryBean #24948
- Deprecate AnnotationFilter.NONE (since MergedAnnotations always filters java.lang.* annotations) #24932
- Improve Javadoc #24908
- Fix Javadoc in PathPattern #24841
- Document default constructor as fallback for multiple non-
@Autowired
constructors #24838 - Document precedence for
@DynamicPropertySource
#24837 - Documentation: AbstractBeanDefinition.getBeanClass() vs BeanFactory.getType #24816
- Fix typos and improve readability in Webflux documentation #24781
- Document role of views within Spring application #24777
- Clarify how to avoid favoring path extensions as well as deprecation warnings #24642
🔨 Dependency Upgrades
❤️ Contributors
We'd like to thank all the contributors who worked on this release!
v5.1.15.RELEASE
⭐ New Features
- Caching of autowire candidate metadata for lazy beans #24973
- Put a limit on the size of DefaultSingletonBeanRegistry#suppressedExceptions #24972
- Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24876
🪲 Bug Fixes
- MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24917
- Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24858
- DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24855
- Recursively copy directory with symbolic link #24826
- Illegal reflective access warning for interface-based lookup method injection #24791
- Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24779
- Implementing interface in abstract class does not expose parameter annotations #24754
- Missing nullability declarations for package web.socket.server.jetty #24750
- MediaTypeNotSupportedStatusException seems unused #24748
- Spring generates huge callstack for async requests #24692
- addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24639
🔨 Dependency Upgrades
- Upgrade to Reactor Californium-SR18 #24893
v5.0.17.RELEASE
⭐ New Features
- Honor overridden AcceptHeaderLocaleContextResolver.getDefaultLocale() #24877
- Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24515
🪲 Bug Fixes
- MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24918
- Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24859
- DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24856
- Recursively copy directory with symbolic link #24827
- Using UriComponentsBuilder.cloneBuilder does not copy uriVariables #24780
- Missing nullability declarations for package web.socket.server.jetty #24751
- MediaTypeNotSupportedStatusException seems unused #24749
- addCandidateComponentsFromIndex should create ScannedGenericBeanDefinitions #24640
- Cycle in LogAdapter.Log4jLog initialization within log appender #24451
📔 Documentation
- Update advice on RestTemplate #24504
v4.3.27.RELEASE
⭐ New Features
- Backport of ContentDisposition fixes to HttpHeaders #24580
- Consistent ROLE_INFRASTRUCTURE declarations for internal configuration classes #24516
🪲 Bug Fixes
- MockHttpServletRequest should not strip brackets from IPV6 address supplied via Host header #24919
- Connection created by SingleConnectionDataSource with suppressClose=true always returns isClosed=false even if the target connection is closed #24860
- DefaultListableBeanFactory.getBean(Class) throws NoSuchBeanDefinitionException on existing bean if getBean(Class) previously tried before registration #24857