以下のような列挙型があります
public enum MyEnum {
ABC("some string"),
DEF("some string"),
GHI("another string");
String value;
private MyEnum(String value) {
this.value = value;
}
public String value() {
return this.value;
}}
そして、enum自体ではなくenumの値をキーとして使用してutil:mapを作成したいと思います。したがって、マップは次のようになります。
"some string" -> "mapped output 1"
"another string" -> "mapped output 2"
列挙型を取得するためにutil:constantを使用できることはわかっていますが、列挙型が表す値が必要です。
だから、その時の私の設定ファイルは次のようになります:
<util:constant id="firstKey" static-field="package.MyEnum.ABC"/>
<util:constant id="secondKey" static-field="package.MyEnum.GHI" />
<util:map id="myMap">
<entry key-ref="firstKey" value="mapped output 1" />
<entry key-ref="secondKey" value="mapped output 2" /></util:map>
.value()を取得したり、valueプロパティにアクセスしてキーとして使用する方法はありますか?
春がうまくいくことを願って、キータイプを文字列として宣言しようとしましたが、これは無視されたようです。
Spring 2.5.1を使用していて、列挙型を変更できない
式言語にアクセスできない場合は、明示的にフォールバックする必要があります MethodInvokingFactoryBean
<bean id="firstKey" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><util:constant static-field="package.MyEnum.ABC"/></property>
<property name="targetMethod" value="value" />
</bean>
抽象親Bean定義を使用すると、反復XMLを少し短縮できます。
<bean name="enumValue" abstract="true"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetMethod" value="value" />
</bean>
<bean id="firstKey" parent="enumValue">
<property name="targetObject"><util:constant static-field="package.MyEnum.ABC"/></property>
</bean>
をスキップしてMethodInvokingFactoryBean
使用することもできます
<util:constant id="MyEnum_ABC" static-field="package.MyEnum.ABC" />
<bean id="firstKey" factory-bean="MyEnum_ABC" factory-method="value" />
ただし、これは、各列挙型定数とそのvalue()
に対して個別の最上位Beanを宣言することを意味しますが、MIFBを使用すると匿名の内部Beanを使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加