|
|
|
@ -34,8 +34,10 @@ import org.apache.commons.logging.Log;
|
|
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import org.springframework.beans.BeansException;
|
|
|
|
|
import org.springframework.beans.CachedIntrospectionResults;
|
|
|
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
|
|
|
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
|
|
|
|
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
|
|
|
|
import org.springframework.beans.factory.groovy.GroovyBeanDefinitionReader;
|
|
|
|
|
import org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory;
|
|
|
|
@ -58,9 +60,11 @@ import org.springframework.context.annotation.AnnotatedBeanDefinitionReader;
|
|
|
|
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
|
|
|
|
import org.springframework.context.annotation.AnnotationConfigUtils;
|
|
|
|
|
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
|
|
|
|
|
import org.springframework.context.annotation.ConfigurationClassPostProcessor;
|
|
|
|
|
import org.springframework.context.support.AbstractApplicationContext;
|
|
|
|
|
import org.springframework.context.support.GenericApplicationContext;
|
|
|
|
|
import org.springframework.core.GenericTypeResolver;
|
|
|
|
|
import org.springframework.core.Ordered;
|
|
|
|
|
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
|
|
|
|
import org.springframework.core.env.CommandLinePropertySource;
|
|
|
|
|
import org.springframework.core.env.CompositePropertySource;
|
|
|
|
@ -401,6 +405,7 @@ public class SpringApplication {
|
|
|
|
|
if (this.lazyInitialization) {
|
|
|
|
|
context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor());
|
|
|
|
|
}
|
|
|
|
|
context.addBeanFactoryPostProcessor(new PropertySourceOrderingBeanFactoryPostProcessor(context));
|
|
|
|
|
// Load the sources
|
|
|
|
|
Set<Object> sources = getAllSources();
|
|
|
|
|
Assert.notEmpty(sources, "Sources must not be empty");
|
|
|
|
@ -1377,4 +1382,28 @@ public class SpringApplication {
|
|
|
|
|
return new LinkedHashSet<>(list);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* {@link BeanFactoryPostProcessor} to re-order our property sources below any
|
|
|
|
|
* {@code @PropertySource} items added by the {@link ConfigurationClassPostProcessor}.
|
|
|
|
|
*/
|
|
|
|
|
private static class PropertySourceOrderingBeanFactoryPostProcessor implements BeanFactoryPostProcessor, Ordered {
|
|
|
|
|
|
|
|
|
|
private final ConfigurableApplicationContext context;
|
|
|
|
|
|
|
|
|
|
PropertySourceOrderingBeanFactoryPostProcessor(ConfigurableApplicationContext context) {
|
|
|
|
|
this.context = context;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int getOrder() {
|
|
|
|
|
return Ordered.HIGHEST_PRECEDENCE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
|
|
|
|
|
DefaultPropertiesPropertySource.moveToEnd(this.context.getEnvironment());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|