2012-01-25 10 views
2

私のプロジェクトのいくつかの設定をSpring Beanに移行しています。私はマップを作成しなければならない時点で固まっており、このマップの値は列挙型のメソッドでなければなりません。私は私がすることができます良いリンクhere(http://www.unicon.net/node/601)を見つけバネを使用してマップにenum値を挿入する

春に移動する必要があるJavaコードは、

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

ようになります

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

例えば

、クラスのいくつかの静的フィールドを参照するキーまたはValを指定するが、私は探しています何を任意のリソースを見つけることができませんでした。 Springを使って何をしたいのかを達成する方法はありますか?

答えて

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> 

私は構成を検証するために今朝いくつかの時間を費やし、これはあなたのニーズに合わせて動作します:あなたがマップをコード化しようとしていることを考えると、私は設定のようなものを見て思います。 enum bean定義を省略する方法があるかもしれませんが、わかりません。

+0

あなたは方向が列挙型であるとINTVALがあなたの最初の質問からプライベートメンバ – Ashish

+0

で、あなたが列挙型のパブリックメソッドをgetIntVal()がある場合、これは働くだろうと思います。この値を 'package.name.Direction.Up.intVal'に設定することにより、Springはその魔法の束を行い、実際にはDirection.Up.getIntVal()を呼び出します。その値はBeanのDirection.Upに格納されます。私が言ったように、私は実際にこれを自分で試したことはありませんでしたが、私がドキュメントで読んだことだけに進んでいます。 –

+0

@Anish上記の設定をテストし、今朝働いているものに更新しました。お役に立てれば。 –

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から少し助けを得ました。これが役立つかどうかを確認してください。

+0

私が間違っていなければ、ここでenumはSpring XML自体の中で定義されています。私の場合、列挙型はJavaであり、その列挙型のメソッドを参照する必要があります。 – Ashish

+0

@Ashish、私は列挙型のプロパティにアクセスする必要があれば、それをbeanとして持つ必要があると私は考えていました。あなたは を試しましたか? –

+0

その列挙型をBeanに変換することは私の最後の手段になります.bcz私のアプリケーションには多くのそのような列挙型があります。私は他の回避策がない場合、すべてをBeanに移動する必要があります。静的フィールドを試したことはありません。その主な理由は、そのタグがクラスのパブリック静的プロパティに使用されているからです。ここで私は列挙型のプライベートプロパティを持っています。パブリックメソッドのみでアクセスできます。 – Ashish