⭐ 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-
@Autowiredconstructors #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!