⭐ New Features
- GenericApplicationContext.registerBean should support non-default constructors [SPR-17292] #21825
- Expose more AbstractBeanDefinition methods in BeanDefinition [SPR-17275] #21808
- Add a BeanFactory#getBeanProvider Kotlin extension [SPR-17274] #21807
- BeanValidationPostProcessor(afterInitialization=true) fails for cglib proxied bean [SPR-17273] #21806
- Ordered list access for BeanFactory.getBeanProvider(), superseding ObjectProvider [SPR-17272] #21805
- Truncate large response bodies when logging in RequestResponseBodyMethodProcessor [SPR-17254] #21787
- Use doOnDiscard to free internally queued data buffers [SPR-17246] #21779
- Bean definition DSL does not generate unique bean names [SPR-17242] #21775
- Autowiring inconsistency:
@Qualifier
works with HashMap but not with Map [SPR-17197] #21731 - Expose the remote IP in ServerHttpRequest and WebSocketSession [SPR-17192] #21727
- Provide matched pattern information in WebFlux fn [SPR-17098] #21635
- Initial GraalVM native images (Substrate VM) support [SPR-16991] #21529
- SchedulerFactoryBean should not override explicit "org.quartz.scheduler.instanceName" setting with bean name [SPR-16884] #21423
- DataBufferUtils does not release DataBuffer on error cases [SPR-16782] #21322
- Allow configuration for DEFAULT_FRAME_MAX_SIZE of WebSocketSession on WebFlux with Netty [SPR-16228] #20776
🪲 Bug Fixes
- Concurrency Exception during bean configuration related to not thread safe getBeanPostProcessor access [SPR-17286] #21819
- getBean(Class) lookup performance degredation [SPR-17282] #21815
- Proper way to dispose of Response [SPR-17268] #21801
- UriComponentsBuilder.uriComponents doesn't properly clone unmodifiable queryParams [SPR-17256] #21789
- PathPatternPredicate still changes variables after failed AndPredicate [SPR-17210] #21743
- JUnit Jupiter
@Nested
class cannot share enclosing class's ApplicationContext if nested class is deemed to be a configuration candidate [SPR-16595] #21136