由于我引入了spring-boot-starter-webflux依赖,经过了getOrCreateEnvironment方法后得到了一个ApplicationReactiveWebEnvironment
configureEnvironment方法按照environment.setConversionService -> configurePropertySources -> configureProfiles的顺序分别对属性源或配置文件进行细粒度控制
protected void configureEnvironment(ConfigurableEnvironment environment, String[] args) {
if (this.addConversionService) {
environment.setConversionService(new ApplicationConversionService());
}
configurePropertySources(environment, args);
configureProfiles(environment, args);
}
addConversionService是SpringApplication的成员字段,默认值为true。ConfigurableEnvironment的void setConversionService(ConfigurableConversionService conversionService)方法继承于ConfigurablePropertyResolver接口, 该接口是PropertyResolver类型都将实现的配置接口。提供用于访问和自定义将属性值从一种类型转换为另一种类型时使用的ConversionService的工具。PropertyResolver是用于针对任何底层源解析属性的接口。
public interface PropertyResolver {
/**
* 返回给定的属性键是否可用于解析,即给定键的值是否不为null。
*/
boolean containsProperty(String key);
/**
* 返回与给定键关联的属性值,如果无法解析键,则返回null。
* @param key 要解析的属性名称
*/
@Nullable
String getProperty(String key);
/**
* 返回与给定键关联的属性值,如果无法解析键,则返回defaultValue。
* @param key 要解析的属性名称
* @param defaultValue 如果没有找到值,则返回默认值
*/
String getProperty(String key, String defaultValue);
/**
* 返回与给定键关联的属性值,如果无法解析键,则返回null。
* @param key 要解析的属性名称
* @param targetType 属性值的预期类型
*/
@Nullable
<T> T getProperty(String key, Class<T> targetType);
/**
* 返回与给定键关联的属性值,如果无法解析键,则返回defaultValue 。
* @param key 要解析的属性名称
* @param targetType 属性值的预期类型
* @param defaultValue 如果没有找到值,则返回默认值
*/
<T> T getProperty(String key, Class<T> targetType, T defaultValue);
/**
* 返回与给定键关联的属性值(从不为null)
* @throws IllegalStateException 如果无法解析给定的key
*/
String getRequiredProperty(String key) throws IllegalStateException;
/**
* 返回与给定键关联的属性值,转换为给定的 targetType(从不为null )。
* @throws IllegalStateException 如果无法解析给定的key
*/
<T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException;
/**
* 解析给定文本中的 ${...} 占位符,用getProperty解析的相应属性值替换它们。
* 没有默认值的不可解析占位符将被忽略并保持不变。
* @param text 要解析的字符串
* @