Work around Spring Framework cache pollution bug

Update `SpringApplication` to work around `SpringFactoriesLoader`
cache pollution by loading factories using a `null` class loader.

See https://github.com/spring-projects/spring-framework/pull/34732
for details.
This commit is contained in:
Phillip Webb 2025-04-09 14:49:17 -07:00
parent 92a8d4181a
commit 4af0ee20d1
1 changed files with 7 additions and 6 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -480,7 +480,7 @@ public class SpringApplication {
}
private <T> List<T> getSpringFactoriesInstances(Class<T> type, ArgumentResolver argumentResolver) {
return SpringFactoriesLoader.forDefaultResourceLocation(getClassLoader()).load(type, argumentResolver);
return SpringFactoriesLoader.forDefaultResourceLocation(getClassLoader(null)).load(type, argumentResolver);
}
private ConfigurableEnvironment getOrCreateEnvironment() {
@ -715,10 +715,11 @@ public class SpringApplication {
* @return a ClassLoader (never null)
*/
public ClassLoader getClassLoader() {
if (this.resourceLoader != null) {
return this.resourceLoader.getClassLoader();
}
return ClassUtils.getDefaultClassLoader();
return getClassLoader(ClassUtils.getDefaultClassLoader());
}
private ClassLoader getClassLoader(ClassLoader fallback) {
return (this.resourceLoader != null) ? this.resourceLoader.getClassLoader() : fallback;
}
/**