2010-08-25 16 views
5

में बाहरी संपत्ति को इंजेक्ट करें मेरे पास स्प्रिंग 2.5 प्रबंधित प्रोजेक्ट में तीन ऐप्स हैं जो कुछ कोड साझा करते हैं और विवरण में भिन्न होते हैं।वसंत संदर्भ

प्रत्येक एप्लिकेशन में एक संपत्ति (java.lang.String) है जिसका उपयोग अनुप्रयोग संदर्भ से पहले किया जाता है।

ऐप संदर्भ बनाने में कुछ समय लगता है और पहले नहीं हो सकता है। इस प्रकार, यह प्रत्येक व्यक्तिगत आवेदन में परिभाषित किया गया है। इस संपत्ति को संदर्भ परिभाषा में डुप्लिकेट किया गया है क्योंकि इसकी भी आवश्यकता है। क्या मैं उस नकल से छुटकारा पा सकता हूं?

क्या यह संपत्ति मेरे आवेदन संदर्भ में इंजेक्ट करना संभव है?

उत्तर

5

PropertyPlaceholderConfigurer पर एक नज़र डालें।

वसंत प्रलेखन इसके बारे में here के बारे में बात करता है।

<bean id="myPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="classpath:my-property-file.properties"/> 
    <property name="placeholderPrefix" value="$myPrefix{"/> 
</bean> 

<bean id="myClassWhichUsesTheProperties" class="com.class.Name"> 
    <property name="propertyName" value="$myPrefix{my.property.from.the.file}"/> 
</bean> 

फिर आप को कहीं भी आप अपने आवेदन के संदर्भ में, constructor-arg, property आदि

+0

फिर भी मैं अपने इस्तेमाल नहीं कर सकता, 'निजी स्ट्रिंग appName = ...', कुछ संदर्भों के लिए एक संपत्ति के रूप में अनुप्रयोग संदर्भ में, क्या मैं कर सकता हूं? – DerMike

+0

नहीं, जैसा कि जावा वाक्यविन्यास है, और अनुप्रयोग संदर्भ एक एक्सएमएल फ़ाइल है। यदि आपके पास एक संपत्ति फ़ाइल है और इसमें ऐपनाम के लिए संपत्ति है, उदाहरण के लिए, 'appName = MyApp', तो आप PropertyPlaceholdConfigurer सेट अप होने के बाद '$ myPrefix {appName}' का उल्लेख कर सकते हैं, और वह (इस मामले में) हल हो जाएगा 'MyApp' पर। –

+0

मुझे आशा है कि 'ctx.addBean (String.class, appName)' जैसी कुछ अच्छी तरह से मिल जाए। – DerMike

3

वसंत 3.0 के साथ आप @Value("${property}") है में चाहते हैं कि स्ट्रिंग के संदर्भ में है। यह परिभाषित PropertyPlaceholderConfigurer बीन्स का उपयोग करता है।

वसंत 2.5 में आप फिर से PropertyPlaceholderConfigurer उपयोग कर सकते हैं और उसके बाद प्रकार java.lang.String की एक सेम है जिसे आप autowire कर सकते हैं निर्धारित करें:

<bean id="yourProperty" class="java.lang.String"> 
    <constructor-arg value="${property}" /> 
</bean> 

@Autowired 
@Qualifier("yourProperty") 
private String property; 
1

आप बाहरी गुण से निपटने के लिए नहीं करना चाहते हैं, तो आपको कुछ निर्धारित कर सकते हैं आम सेम

<bean id="parent" class="my.class.Name"/> 

तो यह किसी भी तरह से प्रारंभ, और आम वसंत xml फ़ाइल में डाल दिया, मान लीजिए कि common.xml। उसके बाद, आप प्रत्येक या अपनी एप्लिकेशन के लिए एक अभिभावक के रूप में इस संदर्भ कर सकते हैं - अपने बच्चे संदर्भ xml फ़ाइल में:

<import resource="common.xml"/> 

और फिर आप सेम में आपकी रुचि है में अपने माता-पिता के गुणों इंजेक्षन कर सकते हैं:

<bean ... 
<property name="myProperty" value="#{parent.commonProperty}"/> 
... 
</bean> 
संबंधित मुद्दे