|
|
|
@ -18,11 +18,15 @@ package org.springframework.bootstrap.context.annotation;
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.BeansException;
|
|
|
|
|
import org.springframework.beans.factory.BeanCreationException;
|
|
|
|
|
import org.springframework.beans.factory.BeanFactory;
|
|
|
|
|
import org.springframework.beans.factory.BeanFactoryAware;
|
|
|
|
|
import org.springframework.beans.factory.ListableBeanFactory;
|
|
|
|
|
import org.springframework.beans.factory.config.BeanPostProcessor;
|
|
|
|
|
import org.springframework.bootstrap.bind.PropertiesConfigurationFactory;
|
|
|
|
|
import org.springframework.bootstrap.context.annotation.EnableConfigurationPropertiesImportSelector.ConfigurationPropertiesHolder;
|
|
|
|
|
import org.springframework.core.annotation.AnnotationUtils;
|
|
|
|
|
import org.springframework.core.convert.ConversionService;
|
|
|
|
|
import org.springframework.core.convert.converter.Converter;
|
|
|
|
|
import org.springframework.core.convert.support.DefaultConversionService;
|
|
|
|
|
import org.springframework.core.env.PropertySources;
|
|
|
|
|
import org.springframework.validation.Validator;
|
|
|
|
@ -33,7 +37,8 @@ import org.springframework.validation.Validator;
|
|
|
|
|
*
|
|
|
|
|
* @author Dave Syer
|
|
|
|
|
*/
|
|
|
|
|
public class PropertySourcesBindingPostProcessor implements BeanPostProcessor {
|
|
|
|
|
public class PropertySourcesBindingPostProcessor implements BeanPostProcessor,
|
|
|
|
|
BeanFactoryAware {
|
|
|
|
|
|
|
|
|
|
private PropertySources propertySources;
|
|
|
|
|
|
|
|
|
@ -43,6 +48,10 @@ public class PropertySourcesBindingPostProcessor implements BeanPostProcessor {
|
|
|
|
|
|
|
|
|
|
private DefaultConversionService defaultConversionService = new DefaultConversionService();
|
|
|
|
|
|
|
|
|
|
private BeanFactory beanFactory;
|
|
|
|
|
|
|
|
|
|
private boolean initialized = false;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param propertySources
|
|
|
|
|
*/
|
|
|
|
@ -64,6 +73,11 @@ public class PropertySourcesBindingPostProcessor implements BeanPostProcessor {
|
|
|
|
|
this.conversionService = conversionService;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
|
|
|
|
this.beanFactory = beanFactory;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Object postProcessBeforeInitialization(Object bean, String beanName)
|
|
|
|
|
throws BeansException {
|
|
|
|
@ -86,7 +100,7 @@ public class PropertySourcesBindingPostProcessor implements BeanPostProcessor {
|
|
|
|
|
factory.setValidator(this.validator);
|
|
|
|
|
// If no explicit conversion service is provided we add one so that (at least)
|
|
|
|
|
// comma-separated arrays of convertibles can be bound automatically
|
|
|
|
|
factory.setConversionService(this.conversionService == null ? this.defaultConversionService
|
|
|
|
|
factory.setConversionService(this.conversionService == null ? getDefaultConversionService()
|
|
|
|
|
: this.conversionService);
|
|
|
|
|
String targetName = null;
|
|
|
|
|
if (annotation != null) {
|
|
|
|
@ -108,4 +122,17 @@ public class PropertySourcesBindingPostProcessor implements BeanPostProcessor {
|
|
|
|
|
return bean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @return
|
|
|
|
|
*/
|
|
|
|
|
private ConversionService getDefaultConversionService() {
|
|
|
|
|
if (!this.initialized && this.beanFactory instanceof ListableBeanFactory) {
|
|
|
|
|
for (Converter<?, ?> converter : ((ListableBeanFactory) this.beanFactory)
|
|
|
|
|
.getBeansOfType(Converter.class).values()) {
|
|
|
|
|
this.defaultConversionService.addConverter(converter);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return this.defaultConversionService;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|