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

Java 如何在Spring应用程序上下文中注入Jakarta枚举?,java,spring,enums,Java,Spring,Enums,我有一个类,它的构造函数采用。我试图找到如何通过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(

我有一个类,它的构造函数采用。我试图找到如何通过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>


当然,我有一个
错误,没有找到匹配的编辑器或转换策略。Spring和Jakarta Enum之间是否存在简单的集成?或者我应该写我自己的PropertyEditor吗?

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


查看Spring中的
标签。它将要求您将模式添加到xml定义中。因此,您将得到以下结果:

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


标签(包括XSD def)的定义和用法已被找到。

我对Spencer的答案投了赞成票,但发现这同样有效。在本例中,您只需要在构造函数arg中指定索引、键入名称

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

我根据收到的一条错误消息得出此结论:

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

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