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