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


我可以使用从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: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。

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


10640
2018-03-23 18:40


起源



答案:


这是一个类似的问题 这个 一。

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

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

更新:自从春季3.1以来 统一物业管理 允许甚至在导入中使用属性(感谢@Jay Blanton在评论中提到这一点)。


13
2018-03-23 20:27



感谢您的建议......我正在查看导入信息。至于使用属性的bean引用,我更新了问题以显示我想要做的事情的一个例子......它似乎对我不起作用。 - Jay Blanton
看起来我找到了答案。我认为语法是?:默认值。但有效的语法是,$ {addressLookupSearchService.sib:Dao}没有问号。基于此JIRA - jira.springsource.org/browse/SPR-4785。 - Jay Blanton
很好,它现在有效。您的更新问题稍微改变了问题的焦点 - 我没有注意到您的特殊问题(使用默认值)。 - FrVaBe
3.1中的非常酷的功能 - 看起来它可以解决导入的属性替换...blog.springsource.com/2011/02/15/... - Jay Blanton
解: stackoverflow.com/questions/16481206/... - sibidiba


答案:


这是一个类似的问题 这个 一。

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

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

更新:自从春季3.1以来 统一物业管理 允许甚至在导入中使用属性(感谢@Jay Blanton在评论中提到这一点)。


13
2018-03-23 20:27



感谢您的建议......我正在查看导入信息。至于使用属性的bean引用,我更新了问题以显示我想要做的事情的一个例子......它似乎对我不起作用。 - Jay Blanton
看起来我找到了答案。我认为语法是?:默认值。但有效的语法是,$ {addressLookupSearchService.sib:Dao}没有问号。基于此JIRA - jira.springsource.org/browse/SPR-4785。 - Jay Blanton
很好,它现在有效。您的更新问题稍微改变了问题的焦点 - 我没有注意到您的特殊问题(使用默认值)。 - FrVaBe
3.1中的非常酷的功能 - 看起来它可以解决导入的属性替换...blog.springsource.com/2011/02/15/... - Jay Blanton
解: stackoverflow.com/questions/16481206/... - sibidiba


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


-2
2018-03-23 19:42