Skip to content

Releases: spring-projects/spring-framework

v5.1.17.RELEASE

21 Jul 08:36
Compare
Choose a tag to compare

⭐ 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

21 Jul 08:33
Compare
Choose a tag to compare

⭐ 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

  • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25404
  • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25234

v4.3.28.RELEASE

21 Jul 08:29
Compare
Choose a tag to compare

⭐ 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

  • Clarify enforceInitMethod/enforceDestroyMethod default values in AbstractBeanDefinition #25405
  • Document exception handling limitations in TaskDecorator implementations (specifically for ThreadPoolTaskExecutor#submit) #25235

v5.3.0-M1

25 Jun 08:12
Compare
Choose a tag to compare
v5.3.0-M1 Pre-release
Pre-release

⭐ 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!

Read more

v5.2.7.RELEASE

09 Jun 07:48
Compare
Choose a tag to compare

⭐ 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

09 Jun 09:07
Compare
Choose a tag to compare

⭐ 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

28 Apr 08:55
Compare
Choose a tag to compare

⭐ 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

  • Upgrade to RSocket 1.0 RC7 #24934
  • Upgrade to Reactor Dysprosium-SR7 #24892

❤️ Contributors

We'd like to thank all the contributors who worked on this release!

v5.1.15.RELEASE

28 Apr 08:17
Compare
Choose a tag to compare

⭐ 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

28 Apr 09:23
Compare
Choose a tag to compare

⭐ 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

28 Apr 10:03
Compare
Choose a tag to compare

⭐ 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