context:property-placeholder是一件好事,但我不想让一些bean配置使用占位符

时间:2012-04-21 08:29:12

标签: java spring

context:property-placeholder是一件好事,但我不希望某些bean配置使用占位符

我想要使用$ {num}字符串的相同属性参数。

怎么办?

像:

<bean id="Sku.findSkuRelationByCategory" class="loxia.dao.support.DynamicQueryHolder">
    <constructor-arg>
        <value>
    <![CDATA[select 
    r.sku_id as sku_id,
    r.sku_category_id as sku_category_id
                from t_ma_sc_sku_relation r
                where r.sku_id in(#foreach($num in [1..$skuCount]) #if($num == 1) :s${num} #else ,:s${num} #end #end)
                and r.sku_category_id in(#foreach($num in [1..$categoryCount]) #if($num == 1) :c${num} #else ,:c${num} #end #end)
                order by sku_category_id]]>
        </value>
    </constructor-arg>
</bean>

1 个答案:

答案 0 :(得分:3)

我对你的理解是:你需要逃避占位符

我认为你只能使用workarrounds,我知道其中两个:

  • 更改占位符配置以使用文本中未使用的其他前缀和后缀

    <contextroperty-placeholder ....>
         ....
         <property name="placeholderPrefix" value="~{"/>
         <property name="placeholderSuffix" value="}" />
    </contextroperty-placeholder>
    
  • 在文本中使用SpEL表达式(#{'$'})将前缀(应该没有前缀)分成两部分

    <value>...#if($num == 1) :s#{'$'}num} #else ,:s#{'$'}num} #end #end)....</value>
    

    这第二个想法不是来自我,我在谷歌搜索后找到了它:http://jazzjuice.blogspot.de/2011/06/escaping-property-placeholders-in.html