Polish "Allow SpringApplicationBuilder to specify a ResourceLoader"
See gh-26690
This commit is contained in:
@@ -94,7 +94,7 @@ public class SpringApplicationBuilder {
|
||||
private boolean configuredAsChild = false;
|
||||
|
||||
public SpringApplicationBuilder(Class<?>... sources) {
|
||||
this.application = createSpringApplication(null, sources);
|
||||
this(null, sources);
|
||||
}
|
||||
|
||||
public SpringApplicationBuilder(ResourceLoader resourceLoader, Class<?>... sources) {
|
||||
@@ -102,29 +102,27 @@ public class SpringApplicationBuilder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link org.springframework.boot.SpringApplication} instances from the
|
||||
* given sources. Subclasses may override in order to provide a custom subclass of
|
||||
* {@link org.springframework.boot.SpringApplication}
|
||||
* Creates a new {@link SpringApplication} instance from the given sources. Subclasses
|
||||
* may override in order to provide a custom subclass of {@link SpringApplication}
|
||||
* @param sources the sources
|
||||
* @return the {@link org.springframework.boot.SpringApplication} instance
|
||||
* @return the {@link SpringApplication} instance
|
||||
* @since 1.1.0
|
||||
* @deprecated Use {@link #createSpringApplication(ResourceLoader, Class...)} with
|
||||
* null resource loader
|
||||
* @deprecated since 2.6.0 for removal in 2.8.0 in favor of
|
||||
* {@link #createSpringApplication(ResourceLoader, Class...)}
|
||||
*/
|
||||
@Deprecated
|
||||
protected SpringApplication createSpringApplication(Class<?>... sources) {
|
||||
return new SpringApplication(sources);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new {@link org.springframework.boot.SpringApplication} instances from the
|
||||
* given sources. Subclasses may override in order to provide a custom subclass of
|
||||
* {@link org.springframework.boot.SpringApplication}
|
||||
* @param resourceLoader the resource loader, can be null to use default resource
|
||||
* loader (see
|
||||
* {@link org.springframework.boot.SpringApplication#SpringApplication(ResourceLoader, Class...)})
|
||||
* Creates a new {@link SpringApplication} instances from the given sources using the
|
||||
* given {@link ResourceLoader}. Subclasses may override in order to provide a custom
|
||||
* subclass of {@link SpringApplication}
|
||||
* @param resourceLoader the resource loader (can be null)
|
||||
* @param sources the sources
|
||||
* @return the {@link org.springframework.boot.SpringApplication} instance
|
||||
* @since 2.5.0
|
||||
* @return the {@link SpringApplication} instance
|
||||
* @since 2.6.0
|
||||
*/
|
||||
protected SpringApplication createSpringApplication(ResourceLoader resourceLoader, Class<?>... sources) {
|
||||
return new SpringApplication(resourceLoader, sources);
|
||||
|
||||
@@ -20,11 +20,13 @@ import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.assertj.core.api.InstanceOfAssertFactories;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationContextFactory;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.SpringApplicationShutdownHookInstance;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
@@ -41,6 +43,7 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@@ -310,13 +313,19 @@ class SpringApplicationBuilderTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
void createWithResourceLoader() {
|
||||
ClassLoader classLoader = new URLClassLoader(new URL[0], getClass().getClassLoader());
|
||||
SpringApplicationBuilder application = new SpringApplicationBuilder(new DefaultResourceLoader(classLoader),
|
||||
ExampleConfig.class)
|
||||
.contextFactory(ApplicationContextFactory.ofContextClass(SpyApplicationContext.class));
|
||||
this.context = application.run();
|
||||
assertThat(this.context.getClassLoader()).isEqualTo(classLoader);
|
||||
void customApplicationWithResourceLoader() {
|
||||
ResourceLoader resourceLoader = mock(ResourceLoader.class);
|
||||
SpringApplicationBuilder applicationBuilder = new SpringApplicationBuilder(resourceLoader,
|
||||
ExampleConfig.class) {
|
||||
@Override
|
||||
protected SpringApplication createSpringApplication(ResourceLoader resourceLoader, Class<?>... sources) {
|
||||
return new CustomSpringApplication(resourceLoader, sources);
|
||||
}
|
||||
};
|
||||
SpringApplication application = applicationBuilder.build();
|
||||
assertThat(application).isInstanceOf(CustomSpringApplication.class)
|
||||
.asInstanceOf(InstanceOfAssertFactories.type(CustomSpringApplication.class))
|
||||
.satisfies((customApp) -> assertThat(customApp.resourceLoader).isEqualTo(resourceLoader));
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@@ -329,6 +338,17 @@ class SpringApplicationBuilderTests {
|
||||
|
||||
}
|
||||
|
||||
static class CustomSpringApplication extends SpringApplication {
|
||||
|
||||
private final ResourceLoader resourceLoader;
|
||||
|
||||
CustomSpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
|
||||
super(resourceLoader, primarySources);
|
||||
this.resourceLoader = resourceLoader;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class SpyApplicationContext extends AnnotationConfigApplicationContext {
|
||||
|
||||
private final ConfigurableApplicationContext applicationContext = spy(new AnnotationConfigApplicationContext());
|
||||
|
||||
Reference in New Issue
Block a user