spring是如何解析xml配置文件中的占位符
前言
我们在配置spring xml配置文件的时候,可以在文件路径字符串中加入 ${} 占位符,spring会自动帮我们解析占位符,这么神奇的操作spring是怎么帮我们完成的呢?这篇文章我们就来一步步揭秘。
1.示例
这段代码在我工程里是会报错的,如下:
可以看到报错里面的文件路径变成了1.8.0_144.xml,也就是说spring帮我们把${java.version}解析成了实际值。
2.原理
abstractrefreshableconfigapplicationcontext
我们在之前的文章里提到过这个类的resolve方法,我们再来瞧一眼:
获取当前环境,这个环境在示例代码中就是 standardenvironment ,并且根据当前环境去解析占位符,这个占位符解析不到还会报错。
resolverequiredplaceholders由standardenvironment的父类abstractenvironment实现。
abstractenvironment
这里的propertysources很重要了,从命名也可以看出我们解析占位符的来源就是从这个集合中来的。这个集合是在我们standardenvironment实例化的时候去自定义的。
standardenvironment
最重要的肯定是我们的 propertyresolver.resolverequiredplaceholders 方法了,propertyresolver.resolverequiredplaceholders其实是propertysourcespropertyresolver的父类abstractpropertyresolver来实现。
abstractpropertyresolver
这里的 this::getpropertyasrawstring 很重要,利用了java8的函数式接口来实现。它的定义在abstractpropertyresolver里
但是我们在doresolveplaceholders里指向的this,所以还得看propertysourcespropertyresolver类。
propertysourcespropertyresolver
看到没有,我们是遍历this.propertysources集合,然后根据key调用它的getproperty方法获取value。我们从上面的standardenvrionment中看到我们定义的是 mappropertysource 和 systemenvironmentpropertysource .
mappropertysource
这里的source就是getsystemproperties(),也就是 abstractenvironment中的方法:
我们还忘了很重要的一步,就是propertyplaceholderhelper的replaceplaceholders方法。
propertyplaceholderhelper
到这里我们就可以看到spring在处理一个小小的占位符就做了这么多设计。可见这个架构是如此严谨。下篇文章我们就来探讨下spring是如何加载这个xml文件的。
以上就是spring是如何解析xml配置文件中的占位符的详细内容,更多关于spring解析xml 占位符的资料请关注其它相关文章!
推荐阅读
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
spring是如何解析xml配置文件中的占位符
-
Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
-
如何 在Spring MVC中 使用多个Spring和MyBatis的xml配置文件(多模块配置)
-
spring是如何解析xml配置文件中的占位符
-
spring+mybatis 配置文件占位符不能解析的问题
-
一个快速找到Spring框架是在哪里找到XML配置文件并解析Beans定义的小技巧 javaspringsapS/4HANACloud