2009-02-05 9 views
100

मेरे पास एक स्टैंडअलोन एनम प्रकार परिभाषित है, इस तरह कुछ:स्प्रिंग कॉन्फ़िगरेशन फ़ाइल में बीन की संपत्ति को एनम मान कैसे असाइन करें?

package my.pkg.types; 

public enum MyEnumType { 
    TYPE1, 
    TYPE2 
} 

अब, मैं उस प्रकार के मान को बीन प्रॉपर्टी में इंजेक्ट करना चाहता हूं:

<bean name="someName" class="my.pkg.classes"> 
    <property name="type" value="my.pkg.types.MyEnumType.TYPE1" /> 
</bean> 

... और यह ' टी काम :(

मुझे वसंत बीन में एक एनम इंजेक्ट कैसे करना चाहिए?

उत्तर

118

आप बस "TYPE1" करने की कोशिश की है? मुझे लगता है कि वसंत प्रतिबिंब का उपयोग करता है टी निर्धारित करने के लिए वह वैसे भी "प्रकार" का प्रकार है, इसलिए पूरी तरह से योग्य नाम अनावश्यक लगता है। मुझे स्वीकार करना होगा कि मैं अनुमान लगा रहा हूं, लेकिन वसंत आमतौर पर अनावश्यकता की सदस्यता नहीं लेता है;)

+0

आपका अनुमान सही है। यह काम। –

11

आप बस "TYPE1" कर सकते हैं।

0

यदि आप और मूल्य जोड़ना चाहते हैं और कस्टम प्रकारों को लिखना चाहते हैं तो आप बीन संपादकों (विवरण स्प्रिंग डॉक्स में हैं) लिख सकते हैं।

36

मूल्य विशेषता के बजाय मूल्य चाइल्ड तत्व का प्रयोग करें और Enum वर्ग के नाम निर्दिष्ट करें:

<property name="residence"> 
    <value type="SocialSecurity$Residence">ALIEN</value> 
</property> 

सिर्फ value="ALIEN" लेखन से अधिक इस दृष्टिकोण का लाभ यह भी काम करता है कि अगर वसंत वास्तविक अनुमान नहीं लगा सकता है संपत्ति से enum का प्रकार (उदाहरण के लिए संपत्ति का घोषित प्रकार एक इंटरफ़ेस है)। अरकनिड की टिप्पणी से अनुकूलित।

+5

यह काम करता है अगर वसंत संपत्ति से वास्तविक प्रकार के enum का अनुमान नहीं लगा सकता है (उदा। संपत्ति सिर्फ एक इंटरफ़ेस है) – araqnid

+0

@araqnid: अच्छा बिंदु। मैंने इसे उत्तर में जोड़ने की स्वतंत्रता ली। – sleske

29

मैं जानता हूँ कि यह एक बहुत पुराना सवाल है, लेकिन इस मामले में किसी को यह करने के लिए नए रास्ते की तलाश में है, नाम स्थान util वसंत का उपयोग करें:

<util:constant static-field="my.pkg.types.MyEnumType.TYPE1" /> 

spring documentation में वर्णित है।

<bean class="org.springframework.amqp.core.MessageDeliveryMode" factory-method="valueOf"> 
    <constructor-arg value="PERSISTENT" /> 
</bean> 
+2

यह एक पुराना सवाल है, लेकिन अभी भी "TYPE1" अभी भी काम करता है। – eis

4

यह है क्या यह मेरे लिए किया था MessageDeliveryMode enum सेम मूल्य लगातार होगा config:

<router expression="payload.orderType" input-channel="processOrder"> 
    <mapping value="DELIVERY" channel="delivery"/> 
    <mapping value="PICKUP" channel="pickup"/> 
</router> 
0

वसंत-एकीकरण उदाहरण, मार्ग एक एक Enum क्षेत्र के आधार पर:

public class BookOrder { 

    public enum OrderType { DELIVERY, PICKUP } //enum 
    public BookOrder(..., OrderType orderType) //orderType 
    ... 

3

एसपीईएल और पी NAMESPACE का उपयोग करना:

<beans... 
xmlns:p="http://www.springframework.org/schema/p" ...> 
.. 
<bean name="someName" class="my.pkg.classes" 
    p:type="#{T(my.pkg.types.MyEnumType).TYPE1}"/> 
0

विशिष्ट होने के लिए, मूल्य को नीचे दिखाए गए अनुसार, आपके मामले में enum प्रकार, उदाहरण के लिए, "TYPE1" या "TYPE2" का नाम निर्धारित करें। और यह काम करेगा:

<bean name="someName" class="my.pkg.classes"> 
    <property name="type" value="TYPE1" /> 
</bean>