代码之家  ›  专栏  ›  技术社区  ›  Guillaume

如何在Spring应用程序上下文中注入Jakarta枚举?

  •  2
  • Guillaume  · 技术社区  · 17 年前

    我有一个构造函数采用 Jakarta enums . 我正试图找到如何通过一个 Spring XML应用程序上下文。

    枚举:

    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 Enum之间是否存在简单的集成?或者我应该写我自己的财产编辑?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Spencer Kormos    17 年前

    <util:constant> 春天的标签。它将要求您将模式添加到xml定义中。因此,您将得到以下结果:

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

    可以找到标记(包括XSD def)的定义和用法 here .

        2
  •  1
  •   Guillaume    17 年前

    我找到了一个解决方案,但它非常冗长(太不合我的口味):

    <bean id="myService" class="MyService">
        <constructor-arg index="0">
            <bean class="MyEnum" factory-method="getEnum">
                <constructor-arg value="MyFirstValue" />
            </bean>
        </constructor-arg>
    </bean>
    
        3
  •  0
  •   Tony R    15 年前

    索引,类型 和 名称

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

    (提示:为简单参数指定索引/类型/名称参数以避免类型歧义)