2008-11-24 55 views
2

我有一个构造函数需要Jakarta enums的类。我试图找到如何通过Spring XML aplicationContext轻松注入它。如何在Spring应用程序上下文中注入Jakarta枚举?

例如:

枚举:

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> 

当然,与这我有e a no matching editors or conversion strategy found错误。 Spring和雅加达枚举之间有一个简单的集成吗?或者我应该写我自己的PropertyEditor?在Spring

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

回答

3

时退房<util:constant>标签:

1

我找到了解决办法,但它是非常冗长(太多了我的口味)。它会要求你将模式添加到你的xml定义中。所以,你会风与以下:

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

标签(包括XSD DEF)的定义和使用中发现here

0

我投了赞成斯宾塞的答案,但发现这也会起作用。在本例中,您只需在构造函数arg中指定索引,类型名称

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

我基于这一关我收到错误讯息的:

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