这是我参与8月更文挑战的第九天,活动详情查看:8月更文挑战
直接贴图
由上图我们直接可以得知,原理就是读取配置文件,从而获取我们平时需要的值,顶级接口定义PropertyResolver
如下
// perperty 文件解析接口
public interface PropertyResolver {
// 是否包涵指定key
boolean containsProperty(String key);
// 根据指定key获取对应的value,这里的注解不在该文章中描述,可关注笔者,后续会一一讲解
@Nullable
String getProperty(String key);
// 根据指定key获取对应的value,若不存在,返回默认值
String getProperty(String key, String defaultValue);
// 根据指定key获取对应的value
@Nullable
<T> T getProperty(String key, Class<T> targetType);
// 根据指定key获取对应的value,若不存在,返回默认值
<T> T getProperty(String key, Class<T> targetType, T defaultValue);
// 根据指定key获取对应的value,若不存在,抛出 IllegalStateException 异常
String getRequiredProperty(String key) throws IllegalStateException;
// 根据指定key获取对应的value,若不存在,抛出 IllegalStateException 异常
<T> T getRequiredProperty(String key, Class<T> targetType) throws IllegalStateException;
// 解决${…}占位符,将它们替换为getProperty解析的相应属性值。没有默认值的不可解析占位符将被忽略并不变地传递。
String resolvePlaceholders(String text);
// 解决${…}占位符,将它们替换为getProperty解析的相应属性值。没有默认值的不可解析占位符将被忽略并不变地传递。 如果参数text为null,抛出 IllegalArgumentException 异常
String resolveRequiredPlaceholders(String text) throws IllegalArgumentException;
ok,我们再看看PropertyResolver
的子接口Environment
它又定义了哪些方法
// 表示当前应用程序运行的环境相关的信息
public interface Environment extends PropertyResolver {
// 返回此环境中显式激活的配置文件集, ConfigurableEnvironment#setActiveProfiles(String...)
// 简单来说就是 --spring.profiles.active对应的值
String[] getActiveProfiles();
// 返回此环境中默认的配置文件集,ConfigurableEnvironment#setActiveProfiles
// 就是 --spring.profiles.default 对应的值
String[] getDefaultProfiles();
// 该注解表明已弃用,直接跳过
@Deprecated
boolean acceptsProfiles(String... profiles);
// 判断是否为激活的
boolean acceptsProfiles(Profiles profiles);
继续,我们来看看解析参数的类SimpleCommandLinePropertySource
public class SimpleCommandLinePropertySource extends CommandLinePropertySource<CommandLineArgs> {}
具体用法官方也给出了说明示例,以及使用场景
public static void main(String[] args) {
PropertySource<?> ps = new SimpleCommandLinePropertySource(args);
// ...
}