PropertyResolver
是一个 解析属性 的组件,在很多地方都有用到,如下:
// class 类中@Value("${spring.application.name}")private String appcationName;
已经知道 PropertyResolver
拿来干嘛的呢,咱们就去分析他 ❀;
注意注意注意:这里经此只解析
class
属性使用,像 yml 和 xml 这种 ${} 不是他的职责!!!
PropertyResolver
他就一个实现类(PropertySourcesPropertyResolver
) 功能也很简单,就是创建我的时候给一个 PropertySources
(他提供了属性编辑功能),那么你调用我的 resolvePlaceholders()
方法的时候就去找对应的属性,然后返回。
加粗的部分就是它主要的职责!!!
PropertyResolver
给我一个 PropertySources
getProperty()
返回的是具体的 value
resolvePlaceholders()
解析对应的 value
${xx}
(就是 String
的一些操作)PropertySources
找到对应的 value
(PropertySources
就是一个map
)ConversionService
(spring3.0 后出来的,用于替换 PropertyEdit
)转换 value 类型(因为resolever
返回的都是 String
)先忽略一些细节比如:
ConversionService
这种会有装门的文字讲解
看一下关系图:

AbstractPropertyResolver
是一个默认的实现,也是通用的实现(如果先扩展 extends
他就好了)。
PropertySourcesPropertyResolver
就是他唯一能用的子类。
// 是否包含某个属性boolean containsProperty(String key);// 获取属性值 如果找不到返回null@NullableString getProperty(String key);// 获取属性值,如果找不到返回默认值String getProperty(String key, String defaultValue);// 获取指定类型的属性值,找不到返回null@Nullable<T> T getProperty(String key, Class<T> targetType);// 获取指定类型的属性值,找不到返回默认值<T> T getProperty(String key, Class<T> targetType, T defaultValue);// 获取属性值,找不到抛出异常IllegalStateExceptionString getRequiredProperty(String key) throws IllegalStateException;// 获取指定类型的属性值,找不到抛出异常IllegalStateException<T> T getRequiredProperty(String key, Class<T> targetType) throwsIllegalStateException;// 替换文本中的占位符(${key})到属性值,找不到不解析String resolvePlaceholders(String text);// 替换文本中的占位符(${key})到属性值,找不到抛出异常IllegalArgumentExceptionString resolveRequiredPlaceholders(String text) throws IllegalArgumentException;
主要功能就两个:获取、和解析
value
值,不过 getProperty()
会存在解析的过程,那么就会调用自己的解析。${}
) ,存在就调用 PropertyPlaceholderHelp
这个类来进行处理,返回的是 String 的 value
PropertyPlaceholderHelp
是一个工具类,用于解析占位符,就是对 ${} 进行截取然后,返回value