2009-10-21 10 views
29

क्या वसंत में एक संपत्ति सेट करने का कोई तरीका नहीं है, न कि कक्षा का उदाहरण, बल्कि कक्षा वस्तु स्वयं? यानीक्लास ऑब्जेक्ट सेट करने के लिए स्प्रिंग सिंटैक्स?

बजाय

<bean> 
    <property name="prototype" class="a.b.c.Foo">... 

आप "फू" का एक उदाहरण दे रही है, कुछ की तरह:

<bean> 
    <property name="prototype" class="java.lang.Class" value="a.b.c.Foo.class"... 

संपादित करें: सबसे अच्छा (कार्य) समाधान अब तक - सामान्य इन्स्टेन्शियशन का उपयोग करें और निकाले जाते हैं सेटर में कक्षा। समाधान के संदर्भ में मुझे लगता है कि यह हम "धोखा दे" के रूप में इस का वर्णन करेंगे:

<bean class="Bar"> 
    <property name="prototype" class="a.b.c.Foo">... 


public class Bar{ 
     public void setPrototype(Object o){ 
       this.prototypeClass=o.getClass(); 

संपादित करें: dtsazza के तरीके के रूप में अच्छी तरह से काम करता है।

संपादित करें: पेड्रोमार्स की विधि भी काम करती है।

उत्तर

37
<bean> 
    <property name="x"> 
     <value type="java.lang.Class">a.b.c.Foo</value> 
    </property> 
</bean> 

यह काम करना चाहिए।

0

नहीं। एक बीन टैग के साथ आप स्प्रिंग को निर्देश देते हैं कि कक्षा को तुरंत कैसे चालू किया जाए।

0

< संपत्ति का नाम = "x" वर्ग = "a.b.c.Foo.class" > काम? यही कारण है कि एक कक्षा वस्तु का एक उदाहरण होना चाहिए ...

+1

नहीं, जो आपको क्लास नॉटफाउंड देगा, क्योंकि Foo.class क्लास परिभाषित की गई कोई चीज़ नहीं है। –

11

आप निश्चित रूप से static factory method Class.forName() इस्तेमाल कर सकते हैं, वहाँ कोई और अधिक सुरुचिपूर्ण वाक्य रचना है कि अगर (और मुझे विश्वास नहीं है):

<property name="x"> 
    <bean class="java.lang.Class" factory-method="forName"> 
     <constructor-arg value="a.b.c.Foo"/> 
    </bean> 
</property> 
+0

मैंने इसे ऊपर उठाया, क्योंकि यह एक अच्छा सुझाव की तरह लग रहा था। आश्चर्यजनक रूप से पर्याप्त, हालांकि, वसंत java.lang.Class के लिए "ClassNotFoundException" के साथ शिकायत कर रहा है। –

+0

कोई बात नहीं, यह अपवाद गलत कॉन्फ़िगरेशन के कारण था :) ठीक काम करता है। –

संबंधित मुद्दे