一步一步升级spring配置4:使用SPEL和Util标签配置spring xml参数
?
1.原始做法: spring xml配置文件,参数直接混合配置
如下
?缺点: 参数和bean混在一起,不利于查找编辑发布
?
2.稍微改进,使用 context:property-placeholder
?
新建? dataSource.properties
??
缺点:这个问题困扰我很久,
就是,如果我有的bean 不需要外部参数配置,就想使用 ${} 这样的符号
?
比如
??
在 stackoverflow上面,国外的朋友给我解答,虽然我的英文很烂,但是外国人看懂了,开心 http://stackoverflow.com/questions/10257448/contextproperty-placeholder-is-a-good-thing-but-i-do-not-want-some-bean-config
?
解决方案:
1).context:property-placeholder 使用 placeholderPrefix和 placeholderSuffix属性
以前不知道这个属性,长见识了,这个方案不错,如果你的spring是3.0以下的话,使用这个
2).不使用外部参数,但要用$符号的bean,可以使用SPEL 转义 #{'$'}num}这个方案可以解决问题,但是比较坑爹,我有很多这样的sql,都需要人工转义,太麻烦,抛弃
?
3.使用SPEL和Util标签配置spring xml参数
SPEL 是spring 3.0新的特性
?
<util:properties id="p_dataSource" location="classpath:config/dataSource.properties"></util:properties>
?
<!--dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="#{p_dataSource['dataSource.driverClassName']}" />
<property name="url" value="#{p_dataSource['dataSource.url']}" />
<property name="username" value="#{p_dataSource['dataSource.username']}" />
<property name="password" value="#{p_dataSource['dataSource.password']}" />
<property name="maxActive" value="#{p_dataSource['dataSource.maxActive']}" />
<property name="maxIdle" value="#{p_dataSource['dataSource.maxIdle']}" />
<property name="maxWait" value="#{p_dataSource['dataSource.maxWait']}" />
</bean>
?
注意:不能 配置成 #{p_dataSource.dataSource.maxIdle},读不到这个属性,需要用 [] 方括号括起来