使用spring在地图中插入枚举值

时间:2012-01-25 04:01:50

标签: java spring

我正在将项目中的一些配置迁移到Spring bean。我完全陷入了必须创建地图的位置,这个地图的值应该是枚举的方法。

需要移动到Spring的java代码看起来像

map.put(key, Direction.Up.getIntVal())

我找到了一个很好的链接here(http://www.unicon.net/node/601),它允许我指定一个引用某个类的静态字段的键或val,例如

<util:constant static-field="javax.naming.Context.INITIAL_CONTEXT_FACTORY"/>

但找不到任何可以满足我要求的资源。有没有办法实现我想用Spring做的事情?

2 个答案:

答案 0 :(得分:1)

你试过FieldRetrievingFactoryBean吗?你可以阅读它here。鉴于您正在尝试编写地图,我认为配置看起来像:

<bean id="enum" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
    <property name="targetClass" value="package.name.Direction"/>
    <property name="targetField" value="Up"/>
</bean>
<bean id="Direction.Up" factory-bean="enum" factory-method="getIntVal"/>

<util:map id="emails">
    <entry key="key" value-ref="Direction.Up"/>
</util:map>

我今天早上花了一些时间来验证配置,这将满足您的需求。可能有一种缩写枚举bean定义的方法,但我不确定。

答案 1 :(得分:1)

如果要在类中注入枚举,只需使用枚举值,即完全分类的名称。因为你想在地图中使用枚举值,

<bean id="enumBean" 
    class="com.enumClass" factory-method="valueOf">
      <constructor-arg>
          <value>enumVal</value>
      </constructor-arg>
</bean>

<util:map id="enumMap">
    <entry key="key" ref="enumBean.intVal"/>
</util:map>

我从here得到了一些帮助。检查这是否对您有所帮助。