代码之家  ›  专栏  ›  技术社区  ›  lapots

在“value”标记内执行表达式

  •  0
  • lapots  · 技术社区  · 6 年前

    我想这么做

    <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(',') }"/>
    

    它可以很好地工作,并为我提供键的一组值。

    怎么了?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mladen Savić    6 年前

    我在这里看到两件事。首先,您将处理器作为字符串和映射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>