我想做这个

<util:set id="datasources" value-type="java.lang.String">
    <value>#{ '${processors}'.split(',') }</value>
</util:set>


其中processors属性是列表processors=ITEM_1,ITEM_2。然后我希望在另一个bean中引用那个bean

<util:map id="processors" key-type="java.lang.String" value-type="java.util.Set">
    <entry key="processorTypes" value-ref="datasources"/>
</util:map>


但这是行不通的-它不会拆分值,最后我得到了所有processorTypes键中的值。

但是当我像这样直接设置value

<entry key="processorTypes" value="#{ '${processors}'.split(',') }"/>


它工作正常,并为我提供了该键的一组值。

怎么了?

最佳答案

我在这里看到的两件事。首先,您将处理器作为字符串和映射ID,这可能会使Spring感到困惑。其次,您的SpEL定义不正确。这是建议的解决方案。

    <util:map id="processors" key-type="java.lang.String" value-type="java.util.Set">
        <entry key="processorTypes" value-ref="sourcesSet"/>
    </util:map>

    <bean id="sourcesSet" class="java.util.HashSet">
        <constructor-arg value="#{list.split(',')}"/>
    </bean>

    <bean id="list" class="java.lang.String">
        <constructor-arg value="ITEM_1,ITEM_2"/>
    </bean>

10-08 16:11