xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)
2016-08-30 22:50
736 查看
项目中,经常会在xml中看到这样的写法:
看到了${}这样的表达式,脑海里面第一印象是不是我们jsp中的EL表达式?!
哈哈。。。
不过,这个真不是EL表达式,Spring提供了自己的EL表达式,可是它的格式是#{}
so....
[b]${key}[/b]这样的表达式在XML中,代表引入的properties文件中key对应的一个变量值,完全是靠第三方jar自己解析的。
==============分割线===========
举例:
a.ibatis的配置文件中,${}的解析,直接上代码:
发现木有,完全就是解析字符的嘛!!!!代码参考:com.ibatis.common.xml.NodeletUtils.java
b.spring的配置文件中,${}的解析,直接上代码
Spring的代码是不是很晦涩,有兴趣的童鞋研究PropertyPlaceholderConfigurer(而且如果它未找到${xxx}中定义的xxx键,它还会去JVM系统属性(System.getProperty())和环境变量(System.getenv())中寻找)
总结:
xml文件中,如果使用了${},解析的工作依靠的就是第三方jar;
<properties resource="properties/database.properties"/> <dataSource type="SIMPLE"> <property value="${driver}" name="JDBC.Driver"/> <property value="${url}" name="JDBC.ConnectionURL"/> <property value="${username}" name="JDBC.Username"/> <property value="${password}" name="JDBC.Password"/> </dataSource>
看到了${}这样的表达式,脑海里面第一印象是不是我们jsp中的EL表达式?!
哈哈。。。
不过,这个真不是EL表达式,Spring提供了自己的EL表达式,可是它的格式是#{}
so....
[b]${key}[/b]这样的表达式在XML中,代表引入的properties文件中key对应的一个变量值,完全是靠第三方jar自己解析的。
==============分割线===========
举例:
a.ibatis的配置文件中,${}的解析,直接上代码:
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; }
发现木有,完全就是解析字符的嘛!!!!代码参考:com.ibatis.common.xml.NodeletUtils.java
b.spring的配置文件中,${}的解析,直接上代码
/** * 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())中寻找)
总结:
xml文件中,如果使用了${},解析的工作依靠的就是第三方jar;
相关文章推荐
- xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)
- xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)
- zTree的调用设使用(跨两个系统,两类技术实现的项目案例SpringMVC+Spring+MyBatis和Struts2+Spring+ibatis框架组合)
- springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件
- zTree的调用设使用(跨两个系统,两类技术实现的项目案例SpringMVC+Spring+MyBatis和Struts2+Spring+ibatis框架组合)
- Spring Boot通过Mybatis,使用mapper接口和xml配置sql,连接数据库
- (二十一)SpringBoot之集成mybatis:使用mybatis xml
- 使用Eclipse的Generator MyBatis/iBatis Artifacts插件自动生成代码,与spring集成
- mybatis和spring整合的几种方式及使用注解简化sql(不使用xml方式写sql)
- mybatis(ibatis)转义字符,符号使用
- 使用intellj ide搭建spring+mybatis时无法识别mapper.xml文件
- spring boot 和mybatis的xml使用
- 在Spring的配置文件applicationContext-mybatis.xml中配置数据源对象中,配置SQL心跳包及参数含义
- springboot整合mybatis使用阿里(阿里连接池)和xml方式
- spring上使用mybatis快速生成插件快速生成xml、model、mapper
- Springboot 中同时使用mybatis注解和springbean-xml配置方式
- 使用eclipse开发spring,hibernate,mybatis等框架的xml配置文件时代码不自动提示
- 使用Eclipse的Generator MyBatis/iBatis Artifacts插件自动生成代码,与spring集成
- Mybatis与spring集成、Mybatis中xml配置文件标签含义