2

コンストラクターがJakarta enumsを取るクラスがあります。Spring XML aplicationContextを介して簡単に注入できる方法を見つけようとしています。

例えば ​​:

列挙型:

public class MyEnum extends org.apache.commons.lang.enums.Enum {
    public static final MyEnum MY_FIRST_VALUE = new MyEnum("MyFirstValue");
    public static final MyEnum MY_SECOND_VALUE = new MyEnum("MySecondValue");

    public static MyEnum getEnum(String name) {
        return (MyEnum) getEnum(MyEnum.class, name);
    }
    [...other standard enum methods]
}

注入するクラス:

public class MyService {
    private final MyEnum status;
    public MyService(MyEnum status) {
        this.status = status;
    }
}

アプリケーション コンテキスト:

<bean id="myService" class="MyService">
    <constructor-arg index="0" value="MyFirstValue" />
</bean>

もちろん、これにはno matching editors or conversion strategy foundエラーがあります。Spring と Jakarta enums の間の簡単な統合はありますか? または、独自の PropertyEditor を作成する必要がありますか?

4

3 に答える 3

3

<util:constant>春のタグをチェックしてください。xml 定義にスキーマを追加する必要があります。したがって、次のようになります。

<bean id="myService" class="MyService">
  <constructor-arg index="0">
    <util:constant static-field="MyEnum.MY_FIRST_VALUE"/>
  </constructor-arg>
</bean>

タグの定義と使用法 (XSD 定義を含む) は、こちらにあります

于 2008-11-25T17:13:47.237 に答える
1

私は解決策を見つけましたが、それは非常に冗長です(私の好みには多すぎます):

<bean id="myService" class="MyService">
    <constructor-arg index="0">
        <bean class="MyEnum" factory-method="getEnum">
            <constructor-arg value="MyFirstValue" />
        </bean>
    </constructor-arg>
</bean>
于 2008-11-24T16:40:58.177 に答える
0

スペンサーの答えに投票しましたが、これもうまくいくことがわかりました。この例では、コンストラクター引数でインデックス、タイプ、および名前を指定するだけです。

<bean id="myService" class="MyService">
<constructor-arg index="0" type="com.package.MyEnum" value="MyFirstValue" />
</bean>

これは、受け取ったエラーメッセージに基づいています。

(ヒント: 型のあいまいさを避けるために、単純なパラメーターにはインデックス/型/名前の引数を指定してください)

于 2011-08-19T19:13:16.593 に答える