AbstractRefreshableConfigApplicationContext获取当前环境,这个环境在示例代码中就是 StandardEnvironment ,并且根据当前环境去解析占位符,这个占位符解析不到还会报错。resolveRequiredPlaceHolders由StandardEnvironment的父类AbstractEnvironment实现。这个集合是在我们StandardEnvironment实例化的时候去自定义的。StandardEnvironment最重要的肯定是我们的 propertyResolver.resolveRequiredPlaceholders 方法了,propertyResolver.resolveRequiredPlaceholders其实是PropertySourcesPropertyResolver的父类AbstractPropertyResolver来实现。它的定义在AbstractPropertyResolver里但是我们在doResolvePlaceholders里指向的this,所以还得看PropertySourcesPropertyResolver类。PropertySourcesPropertyResolver看到没有,我们是遍历this.propertySources集合,然后根据key调用它的getProperty方法获取value。PropertyPlaceholderHelper到这里我们就可以看到Spring在处理一个小小的占位符就做了这么多设计。可见这个架构是如此严谨。下篇文章我们就来探讨下Spring是如何加载这个Xml文件的。

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符

spring是如何解析xml配置文件中的占位符