org.springframework.core.env.Environment
环境,设置默认环境,激活开发,测试,生产等环境 该接口继承 PropertyResolver
PropertyResolver的作用:根据Key获取value,解决占位符的问题 ${xxx}
先说说PropertySourcesPropertyResolver
org.springframework.core.env.ConfigurablePropertyResolver
继承 PropertyResolver
设置占位符前缀
设置占位符后缀
占位符中的分隔符,默认:(无法转换,就用:后面的值替代)
获取转换器 `ConversionService`,另开一篇文章专门介绍
org.springframework.core.env.AbstractPropertyResolver
实现 ConfigurablePropertyResolver
内置一个 `ConversionService`,主要目的是实现该方法:
protected <T> T convertValueIfNecessary(Object value, @Nullable Class<T> targetType)
依赖 PropertyPlaceholderHelper。该类内置一个根据Key获取Valuer的接口
@FunctionalInterface
public interface PlaceholderResolver {
/**
* Resolve the supplied placeholder name to the replacement value.
* @param placeholderName the name of the placeholder to resolve
* @return the replacement value, or {@code null} if no replacement is to be made
*/
@Nullable
String resolvePlaceholder(String placeholderName);
}
为什么不直接传递 AbstractPropertyResolver,接口隔离。Helper类的主要作用实现占位符替换。支持 ${xxx:yyy} ${aa${xxx}:yyyy}
org.springframework.core.env.PropertySourcesPropertyResolver
内部用
PropertySources
存储。PropertySource存储键值对的容器。 所有根据Key获取Value的最终都是从PropertySources获取。
org.springframework.core.env.ConfigurableEnvironment
设置默认环境,其它环境 合并另外一个环境 获取MutablePropertySources,系统参数-D,环境变量(操作系统层)
org.springframework.core.env.AbstractEnvironment
spring.profiles.active 可以逗号分隔进行配置 spring.profiles.default spring.getenv.ignore 不允许获取环境变量
org.springframework.core.env.StandardEnvironment
内部是环境变量和系统参数
@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
propertySources.addLast(new MapPropertySource(SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, getSystemProperties()));
propertySources.addLast(new SystemEnvironmentPropertySource(SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, getSystemEnvironment()));
}