我可以使用从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。
关于我做错了什么的想法?
答案 0 :(得分:13)
这与this一个类似的问题。
Imports在 bean(property-placeholder)创建之前解析,因此您无法使用属性文件来定义要在import语句中使用的属性。在这种情况下,您必须将属性设置为system property
(-Djdbc.ctxType=JTA
)(请查看链接 - 段落注意)。
但是在bean定义中使用属性文件属性可以正常工作 - 这就是它们的用途: - )
更新:从Spring 3.1开始,Unified Property Management即使在导入中也允许使用属性(感谢@Jay Blanton在评论中提到这一点)。
答案 1 :(得分:-2)
是的,你可以。您可以在导入和注入中使用表达式。