2017-09-15 138 views
0

我試圖配置基於應用屬性的Spring bean,我的最終目標是在下面的僞代碼來描述:訪問應用程序屬性

if ${my.config} 
    <bean id="myBean" class="path.to.MyBeanImplOne" /> 
else 
    <bean id="myBean" class="path.to.MyBeanImplTwo" /> 
end 

其中my.config是一個布爾屬性。 據this規劃環境地政司指導,#{${my.config} ? 'path.to.MyBeanImplOne' : 'path.to.MyBeanImplTwo'}是一個有效的表達,所以我嘗試了以下配置:

<bean id="myBean" class="#{${my.config} ? 'path.to.MyBeanImplOne' : 'path.to.MyBeanImplTwo'}" /> 

,但得到以下異常:

Expression parsing failed; nested exception is org.springframework.expression.spel.SpelParseException: EL1041E: After parsing a valid expression, there is still more data in the expression: 'lcurly({)' 

我不能在訪問屬性找到文檔用於xml配置的SpEL表達式。這僅支持Java配置嗎?

我見過一些提出的解決方案,我的問題(其中一些在這question)。我不想使用systemProperties,因爲我覺得這種配置不應該被指定爲運行參數,我覺得使用profiles對於這個特殊的用例來說是矯枉過正的。

有人能夠做我嘗試過的成功嗎?或者,有人可以確認我嘗試使用的語法是否確實在xml配置中不受支持。

回答

0

嘗試

編輯

這對我的作品......

<bean id="foo" class="#{'${my.config}'.equals('true') ? 'java.lang.Integer' : 'java.lang.String'}"> 
    <constructor-arg value="1" /> 
</bean> 
+0

我已經試過了,但我卻得到了一個例外,因爲它不能轉換字符串轉換爲布爾值,意味着它沒有提取屬性,而是將其作爲字符串處理。 –

+0

將引號添加到'equals('true')' - 請參閱我的編輯。 –