进口/豆类参考物业的占位符

时间:2011-03-23 18:40:54

标签: spring

我可以使用从property-placeholder加载的属性来使上下文导入动态吗?

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

属性文件

jdbc.ctxType=JTA

所以这样我就可以改变基于属性加载的上下文文件的类型。

另外,我可以做同样的事情来使bean引用名称动态吗?

<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
杰伊

--------------------更新ref的属性示例--------------------- ----

我使用以下条目创建了一个属性文件:

addressLookupSearchService.sib=DaoMock

然后我在Spring Context File中有以下配置:

<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?:Dao}不起作用,它总是默认为 即使我的属性说它应该设置为addressSearchDaoMock,也可以使用addressSearchDao的bean id。

关于我做错了什么的想法?

2 个答案:

答案 0 :(得分:13)

这与this一个类似的问题。

Imports在 bean(property-placeholder)创建之前解析,因此您无法使用属性文件来定义要在import语句中使用的属性。在这种情况下,您必须将属性设置为system property-Djdbc.ctxType=JTA)(请查看链接 - 段落注意)。

但是在bean定义中使用属性文件属性可以正常工作 - 这就是它们的用途: - )

更新:从Spring 3.1开始,Unified Property Management即使在导入中也允许使用属性(感谢@Jay Blanton在评论中提到这一点)。

答案 1 :(得分:-2)

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