我正在将项目中的一些配置迁移到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做的事情?
答案 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得到了一些帮助。检查这是否对您有所帮助。