我有一个构造函数需要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枚举之间是否有一个简单的集成?或者我应该编写自己的PropertyEditor吗?
答案 0 :(得分:3)
查看Spring中的<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。
答案 1 :(得分:1)
我找到了一个解决方案,但它非常冗长(根本不符合我的口味):
<bean id="myService" class="MyService">
<constructor-arg index="0">
<bean class="MyEnum" factory-method="getEnum">
<constructor-arg value="MyFirstValue" />
</bean>
</constructor-arg>
</bean>
答案 2 :(得分:0)
我投了斯宾塞的答案,但发现这也会有效。在此示例中,您只需在constructor-arg中指定索引,键入和名称。
<bean id="myService" class="MyService">
<constructor-arg index="0" type="com.package.MyEnum" value="MyFirstValue" />
</bean>
我的基础是我收到的错误信息:
(提示:为简单参数指定索引/类型/名称参数以避免类型歧义)