Refine SpringApplication source types
Update `SpringApplication` so that the `run` methods and constructors now require `Class<?>` arguments, rather than `Objects`. String based sources can still be loaded, but must now be set on the `getSources()` collections. `Package` and `Resource` types are no longer directly supported. This change should help IDEs offer better content assist, and will help integrations with alternative languages such as Ceylon. Users currently passing in Class references or using the `spring.main.sources` property should not be affected by this change. If an XML resource is being used, some refactoring may be required (see the changes to `SampleSpringXmlApplication` in this commit). Fixes gh-9170
This commit is contained in:
@@ -91,9 +91,20 @@ public class SpringBootContextLoader extends AbstractContextLoader {
|
||||
@Override
|
||||
public ApplicationContext loadContext(MergedContextConfiguration config)
|
||||
throws Exception {
|
||||
Class<?>[] configClasses = config.getClasses();
|
||||
String[] configLocations = config.getLocations();
|
||||
Assert.state(
|
||||
!ObjectUtils.isEmpty(configClasses)
|
||||
|| !ObjectUtils.isEmpty(configLocations),
|
||||
"No configuration classes "
|
||||
+ "or locations found in @SpringApplicationConfiguration. "
|
||||
+ "For default configuration detection to work you need "
|
||||
+ "Spring 4.0.3 or better (found " + SpringVersion.getVersion()
|
||||
+ ").");
|
||||
SpringApplication application = getSpringApplication();
|
||||
application.setMainApplicationClass(config.getTestClass());
|
||||
application.setSources(getSources(config));
|
||||
application.addPrimarySources(Arrays.asList(configClasses));
|
||||
application.getSources().addAll(Arrays.asList(configLocations));
|
||||
ConfigurableEnvironment environment = new StandardEnvironment();
|
||||
if (!ObjectUtils.isEmpty(config.getActiveProfiles())) {
|
||||
setActiveProfiles(environment, config.getActiveProfiles());
|
||||
@@ -137,17 +148,6 @@ public class SpringBootContextLoader extends AbstractContextLoader {
|
||||
return new SpringApplication();
|
||||
}
|
||||
|
||||
private Set<Object> getSources(MergedContextConfiguration mergedConfig) {
|
||||
Set<Object> sources = new LinkedHashSet<>();
|
||||
sources.addAll(Arrays.asList(mergedConfig.getClasses()));
|
||||
sources.addAll(Arrays.asList(mergedConfig.getLocations()));
|
||||
Assert.state(!sources.isEmpty(), "No configuration classes "
|
||||
+ "or locations found in @SpringApplicationConfiguration. "
|
||||
+ "For default configuration detection to work you need "
|
||||
+ "Spring 4.0.3 or better (found " + SpringVersion.getVersion() + ").");
|
||||
return sources;
|
||||
}
|
||||
|
||||
private void setActiveProfiles(ConfigurableEnvironment environment,
|
||||
String[] profiles) {
|
||||
EnvironmentTestUtils.addEnvironment(environment, "spring.profiles.active="
|
||||
|
||||
Reference in New Issue
Block a user