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