Java SpringIOC:注入一个包含Bean名称的映射

Java SpringIOC:注入一个包含Bean名称的映射,java,spring,map,properties,inversion-of-control,Java,Spring,Map,Properties,Inversion Of Control,以下是合法的Spring配置: <util:map id="beanMap"> <entry key="key1" value-ref="bean1"/> <entry key="key2" value-ref="bean2"/> <entry key="key3" value-ref="bean3"/> </util:map> <bean id="usesBeanMap" class="...">

以下是合法的Spring配置:

<util:map id="beanMap">
    <entry key="key1" value-ref="bean1"/>
    <entry key="key2" value-ref="bean2"/>
    <entry key="key3" value-ref="bean3"/>
</util:map>

<bean id="usesBeanMap" class="...">
    <constructor-arg ref="beanMap" />
</bean>
这不是开箱即用的,因为
Properties
对象实际上是一个
Map
,所以需要以某种方式进行转换,或者使用一种方法告诉Spring,这些值实际上是“
value ref
”bean名称


有没有一种简单/推荐的方法可以实现这一点?

请看我的回复。我相信,这是一种无xml的方法,用于非常类似的事情。xml不够具体化。。。?您可以将util:map声明移动到类路径上的任意位置的另一个文件中,并将其添加到web中的配置位置。很抱歉。您的映射对其他bean有“value ref”。@aff-已经有了一个已建立的部署结构。弄乱它是有代价的,就像编写代码是有代价的一样。当前,上下文XML文件在部署时仍保留在.jar中。可能有一个属性提供了
util:map
config的XML位置。哦,顺便说一句,它不是一个webapp,所以没有web.xml.Ok,但是你打算把属性文件放在已建立的部署结构中的什么地方呢?您可以将XML放在那里,然后将其添加到应用程序上下文中。我只是想指出你的问题中有两个问题。如何为此目的使用属性,以及如何外部化文件。只有在您希望的情况下,如何使用属性才是一个问题,这段SpringXML本身可能会被外部化。
<util:properties id="beanProperties" location="file:/bean-value.properties"/>

<bean id="usesBeanProperties" class="...">
    <constructor-arg ref="beanProperties" />
</bean>