java properties 大括号_xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)...

项目中,经常会在xml中看到这样的写法:

看到了${}这样的表达式,脑海里面第一印象是不是我们jsp中的EL表达式?!

哈哈。。。

不过,这个真不是EL表达式,Spring提供了自己的EL表达式,可是它的格式是#{}

so....

${key}这样的表达式在XML中,代表引入的properties文件中key对应的一个变量值,完全是靠第三方jar自己解析的。

==============分割线===========

举例:

a.ibatis的配置文件中,${}的解析,直接上代码:

public staticString parsePropertyTokens(String string, Properties variables) {final String OPEN = "${";final String CLOSE = "}";

String newString=string;if (newString != null && variables != null) {int start =newString.indexOf(OPEN);int end =newString.indexOf(CLOSE);while (start > -1 && end >start) {

String prepend= newString.substring(0, start);

String append= newString.substring(end +CLOSE.length());

String propName= newString.substring(start +OPEN.length(), end);

String propValue=variables.getProperty(propName);if (propValue == null) {

newString= prepend + propName +append;

}else{

newString= prepend + propValue +append;

}

start=newString.indexOf(OPEN);

end=newString.indexOf(CLOSE);

}

}returnnewString;

}

发现木有,完全就是解析字符的嘛!!!!代码参考:com.ibatis.common.xml.NodeletUtils.java

b.spring的配置文件中,${}的解析,直接上代码

/*** Resolve placeholder values in the given array of patterns.

*@returna new array with updated patterns*/

protectedString[] resolveEmbeddedValuesInPatterns(String[] patterns) {if (this.embeddedValueResolver == null) {returnpatterns;

}else{

String[] resolvedPatterns= newString[patterns.length];for (int i=0; i < patterns.length; i++) {

resolvedPatterns[i]= this.embeddedValueResolver.resolveStringValue(patterns[i]);

}returnresolvedPatterns;

}

}

Spring的代码是不是很晦涩,有兴趣的童鞋研究PropertyPlaceholderConfigurer(而且如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找)

总结:

xml文件中,如果使用了${},解析的工作依靠的就是第三方jar;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值