⭐ New Features
- Optimize
ClassUtils#getMostSpecificMethod
#31100 - Optimize whitespace checks in
StringUtils
#31069 - Align validation metadata handling in
PayloadMethodArgumentResolver
#31056 - Register an override for an existing adapter in
ReactiveAdapterRegistry
#31048 - Make bean initialization deterministic for multiple
@Autowired
methods on same bean class #30994 - Performance bottlenecks while creating scoped bean instances #30892
🐞 Bug Fixes
- Possible classloader leak through incomplete clearing of annotation caches #31176
- Spring
LogFactory
implementation deviates from original ApacheLogFactory
in terms of abstract method declarations #31167 - Bean injection fails due to
nullSafeConciseToString()
invokingisEmpty()
on aMap
/Collection
proxy #31156 - SpelExpressionParser throws IllegalStateException instead of ParseException for invalid expression #31099
@DynamicPropertySource
in@Nested
test class cannot override dynamic properties from enclosing class #31085TransactionalApplicationListenerMethodAdapter
should find@TransactionalEventListener
on target class method #31037- ScheduledAnnotationBeanPostProcessor: graceful shutdown should not interrupt currently running jobs #31020
- Permgen memory leak due to
ClassInfo
caching injava.beans.Introspector
on JDK 11/17 #31005 MethodIntrospector.selectMethods(?)
fails to find methods in case of special bridge method arrangement #30907
📔 Documentation
- Fix documentation: Passing in Lists of Values for IN Clause does not work with JdbcTemplate #31229
- Refine CORS documentation for wildcard processing #31168
- Propagation REQUIRES_NEW may cause connection pool deadlock #31040
- Clarify R2DBC
ConnectionAccessor
andDatabasePopulator
exception declarations #30933 - Doc: Avoid deadlock in
@PostConstruct
through SmartInitializingSingleton or ContextRefreshedEvent #30889