java xml什么意思_xml中${}的使用含义

在项目中经常看到这样的${}标识方法,如:

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

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

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

在ibatis中${key}的解析(代码参考:com.ibatis.common.xml.NodeletUtils.java)如下:

public static String 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);

}

}

return newString;

}

在spring中${key}的解析如下:

/**

* Resolve placeholder values in the given array of patterns.

* @return a new array with updated patterns

*/

protected String[] resolveEmbeddedValuesInPatterns(String[] patterns) {

if (this.embeddedValueResolver == null) {

return patterns;

}

else {

String[] resolvedPatterns = new String[patterns.length];

for (int i=0; i < patterns.length; i++) {

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

}

return resolvedPatterns;

}

}

Spring的代码有点不好理解,有兴趣的话可以研究PropertyPlaceholderConfigurer(而且如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值