2011-07-11 13 views
16

मैं तीन (ए, बी, सी) वसंत context.xml, एक बुनियादी विन्यास के लिए, बी और सी आयात किया जाता है एवसंत संदर्भ में एक स्ट्रिंग को परिभाषित

ऐ पर एक सेम में है:

 
<bean class="com.example.Ex"> 
    <property name="aString" value="${myString}" /> 
</bean> 

अब मैं बी और सी संदर्भ पर MyString संपत्ति को परिभाषित करना चाहता हूं, इसे बिना दो अलग-अलग गुण फ़ाइल बनाने और लोड करने के लिए संभव है?

उत्तर

49

आप गुणों से निपटने के बजाय स्ट्रिंग प्रकार के बीन घोषित करके वैकल्पिक तरीके से प्रयास कर सकते हैं।

इस तरह:

एक

<bean class="com.example.Ex"> 
    <property name="aString" ref="str" /> 
</bean> 

और फिर आप अपने बी में घोषित करने और सी "str" ​​संदर्भ इस तरह संदर्भों:

बी

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_1"/> 
</bean> 

सी

<bean id="str" class="java.lang.String"> 
    <constructor-arg value="string_2"/> 
</bean> 
+1

यह सच है ... स्ट्रिंग क्लास में स्ट्रिंग के साथ एक कन्स्ट्रक्टर है ... मैंने इस पर सोचा नहीं है..धन्यवाद! – rascio

+0

अभ्यास द्वारा सबसे अच्छा तरीका कौन सा है? और क्यों? –

-7

यह भी एक तरीका है।

<bean id="str" class="com.example.Ex"> 
<constructor-arg type="java.lang.String" value="INDIA"/> 

+1

यह संदर्भ ए – Kieran

+0

द्वारा तय किए गए स्ट्रिंग के लिए बी और सी के अलग-अलग मान रखने की समस्या को हल करने में मदद नहीं करता है, इसके अलावा आप यह कहते हैं कि क्लास एक्स के लिए एक कन्स्ट्रक्टर है, जो स्ट्रिंग को तर्क के रूप में स्वीकार करता है। –

4

पूर्णता यहाँ एक स्ट्रिंग बनाने का एक और तरीका के लिए:

के बजाय स्ट्रिंग निर्माता जो एक नई वस्तु बलों अनावश्यक रूप से बनाया जाना बुला यह valueOf उपयोग करने के लिए एक बेहतर विचार हो सकता है विधि है जिसके यहाँ एक "कुछ भी नहीं" निर्माता के रूप में काम कर सकते हैं:

<bean id="str" class="java.lang.String" factory-method="valueOf"> 
    <constructor-arg value="string_1"/> 
</bean> 

हालांकि यह केवल अतिरिक्त XML अत्री पार्स करने की भूमि के ऊपर के रूप में शैक्षणिक है ब्यूट जो स्ट्रिंग्स को भी बनाया जाएगा, कन्स्ट्रक्टर के बजाए कॉलिंग वैल्यू के प्रदर्शन लाभ से अधिक हो सकता है।

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