2013-01-04 12 views
7

के साथ प्रॉपर्टी फ़ाइल से नेस्टेड प्लेसहोल्डर्स लोड हो रहा है क्या नेस्टेड प्लेसहोल्डर को गुण फ़ाइल में से लोड करना संभव है? मैं गतिशील रूप से एक यूआरएल लोड करने की कोशिश कर रहा हूँ।स्प्रिंग

उदाहरण के लिए, मेरी गुण फ़ाइल

my.url=http://localhost:8888/service/{nestedProperty}/ 

शामिल अगर वहाँ कार्यावधि में {} nestedProperty के लिए मूल्यों में लोड करने के लिए कोई तरीका है? संसाधन बंडल के व्यवहार के समान। यदि हां, तो मैं स्ट्रिंग को प्रभावी ढंग से कैसे चालू कर पाऊंगा? अब तक मैं सोच रहा हूं कि

<bean id="myURLString" class="java.lang.String" scope="prototype" lazy-init="true"> 
    <property name="URL" value="${my.url}" /> 
</bean> 

... लेकिन मुझे यकीन नहीं है कि कौन से गुण घोंसला करते हैं। हालांकि मैं वर्तमान में

ctx.getBean("myURLString", String.class, new Object[] { nestedProperty}); 

की तर्ज मैं PropertyPlaceholderConfigurer देखा है और कई अन्य संपत्तियों यहाँ पर सवाल फाइल के साथ कुछ है मैं, एक सेम एनोटेशन यदि संभव हो तो का उपयोग कर प्राप्त करना चाहते हैं, लेकिन मैं नहीं कर पा रहे यह पता लगाने के लिए कि क्या यह भी संभव है।

मैं भी ध्यान देना चाहिए कि मैं अपने कोड के भीतर से गतिशील रूप से इस नेस्टेड संपत्ति लोड करना चाहते हैं, या कम से कम उन्हें वहां से हेरफेर

उत्तर

9

हाँ, यह संभव है (@PostConstruct के माध्यम से संभवतः?):

my.url=http://localhost:8888/service/${nestedProperty} 
nestedProperty=foo/bar/baz 

अपने उदाहरण में ब्रेसिज़ के सामने डॉलर के चिह्न में जोड़ें और आप सेट हैं! एक वसंत सेम में

@Value("${my.url}") 
private String url; 

:

वास्तव में पूरी तरह से हल संपत्ति का उपयोग करने के लिए, यह करते हैं।

+0

क्या मुझे किसी भी तरह से मेरी बीन परिभाषा में इस संपत्ति को स्पष्ट रूप से परिभाषित करने की आवश्यकता नहीं होगी? – lase

+0

'नेस्टेडप्रोपर्टी' उस नाम की संपत्ति को संदर्भित करता है - उदाहरण की दूसरी पंक्ति - एक बीन नहीं। वसंत सभी कॉन्फ़िगरेशन फ़ाइलों में सभी गुणों को लोड करता है और उन्हें एक दूसरे के खिलाफ हल करता है। जब तक आप परिपत्र संदर्भ से बचें तब तक आप ठीक हैं। –

+0

क्या यह मुझे 'नेस्टेडप्रॉपर्टी' के गुण फ़ाइल मान का उपयोग करने के बजाय ctx.getBean() कॉल से नेस्टेड गुणों को गतिशील रूप से निर्दिष्ट करने की अनुमति देता है? – lase