Browse Source

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.
pull/45151/head
Phillip Webb 8 months ago
parent
commit
4af0ee20d1
  1. 13
      spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

13
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/SpringApplication.java

@ -1,5 +1,5 @@ @@ -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 { @@ -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 { @@ -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;
}
/**

Loading…
Cancel
Save