2011-03-23 90 views
11

我可以使用從屬性佔位符加載的屬性使上下文導入動態嗎?Property for Place/Bean Refs

<context:property-placeholder location="classpath*:/enterprise.properties"/> 
<import resource="classpath*:/Fsb${jdbc.ctxType?:Jdbc}-context.xml"/> 

屬性文件

jdbc.ctxType=JTA 

所以這樣我可以改變一個基於屬性加載的情況下的文件類型。

另外,我可以做同樣的事情,使一個bean ref名稱動態嗎?

<bean id="personBusinessService" class="com.foo.PersonBusinessServiceImpl" 
      p:personUidDataService-ref="personUidDataService${personUidDataService.sib?:Api}" 
      p:identifierLookupSearchService-ref="identifierLookupSearchService${identifierLookupSearchService.sib?:Api}" 
      p:contactPointBusinessService-ref="contactPointBusinessService${contactPointBusinessService.sib?:Api}" 
/> 

屬性文件

personUidDataService.sib=Stub 

周杰倫

--------------------例如更新的屬性參考--- ----------------------

我創建了以下條目的屬性文件:

addressLookupSearchService.sib=DaoMock 

然後,我有一個Spring上下文文件如下配置:

<context:property-placeholder location="classpath*:/simple.properties"/> 

<!-- EntityManager will be injected into DAO by JPA annotations --> 
<bean id="addressSearchDao" class="com.foo.AddressSearchDaoImpl"/> 

<bean id="addressSearchDaoMock" class="com.foo.MockAddressSearchDaoImpl"/> 

<bean id="addressLookupSearchService" class="com.foo.AddressLookupSearchServiceImpl" 
    p:baseDao-ref="addressSearch${addressLookupSearchService.sib?:Dao}"/> 

而且addressSearch $ {addressLookupSearchService.sib:道}不起作用,它總是默認爲 addressSearchDao的豆ID即使我的財產說它應該設置爲addressSearchDaoMock。

有什麼想法,我做錯了什麼?

回答

13

這是一個類似的問題this之一。

Imports已解決之前 bean(property-placeholder)的創建,因此您不能使用該屬性文件來定義您想要在導入語句中使用的屬性。在這種情況下,您必須將該屬性設置爲system property-Djdbc.ctxType=JTA)(請參閱鏈接 - 段落注意)。

但在bean定義使用屬性文件屬性工作正常 - 這就是他們是什麼:-)

更新:由於春季3.1 Unified Property Management甚至允許進口使用性能(感謝@Jay布蘭頓的在評論中提到這一點)。

+0

感謝您的建議......我正在查看導入信息。至於使用屬性的bean引用,我更新了問題以顯示我正在嘗試做的事情的一個例子......並且它似乎不適合我。 – 2011-03-23 23:16:17

+0

看起來我找到了答案。我認爲語法是?:用於默認值。但是工作的語法是$ {addressLookupSearchService.sib:Dao},沒有問號。基於此JIRA - https://jira.springsource.org/browse/SPR-4785。 – 2011-03-24 03:36:24

+0

現在很好用。您的更新問題稍微改變了問題的焦點 - 我沒有注意到您的特殊問題(使用默認值)。 – FrVaBe 2011-03-24 08:09:56

-2

是的,你可以。您可以在導入和注入中使用表達式。

相關問題