Avoid using reflection to create SpringApplication's context

Closes gh-22322
This commit is contained in:
Andy Wilkinson
2020-07-14 14:26:39 +01:00
parent 0cd83007e9
commit 0c8e52e877
8 changed files with 176 additions and 62 deletions

View File

@@ -110,7 +110,8 @@ public class SpringBootContextLoader extends AbstractContextLoader {
else if (config instanceof ReactiveWebMergedContextConfiguration) {
application.setWebApplicationType(WebApplicationType.REACTIVE);
if (!isEmbeddedWebEnvironment(config)) {
new ReactiveWebConfigurer().configure(application);
application.setApplicationContextFactory(
(webApplicationType) -> new GenericReactiveWebApplicationContext());
}
}
else {
@@ -250,13 +251,11 @@ public class SpringBootContextLoader extends AbstractContextLoader {
*/
private static class WebConfigurer {
private static final Class<GenericWebApplicationContext> WEB_CONTEXT_CLASS = GenericWebApplicationContext.class;
void configure(MergedContextConfiguration configuration, SpringApplication application,
List<ApplicationContextInitializer<?>> initializers) {
WebMergedContextConfiguration webConfiguration = (WebMergedContextConfiguration) configuration;
addMockServletContext(initializers, webConfiguration);
application.setApplicationContextClass(WEB_CONTEXT_CLASS);
application.setApplicationContextFactory((webApplicationType) -> new GenericWebApplicationContext());
}
private void addMockServletContext(List<ApplicationContextInitializer<?>> initializers,
@@ -268,19 +267,6 @@ public class SpringBootContextLoader extends AbstractContextLoader {
}
/**
* Inner class to configure {@link ReactiveWebMergedContextConfiguration}.
*/
private static class ReactiveWebConfigurer {
private static final Class<GenericReactiveWebApplicationContext> WEB_CONTEXT_CLASS = GenericReactiveWebApplicationContext.class;
void configure(SpringApplication application) {
application.setApplicationContextClass(WEB_CONTEXT_CLASS);
}
}
/**
* Adapts a {@link ContextCustomizer} to a {@link ApplicationContextInitializer} so
* that it can be triggered via {@link SpringApplication}.