जब एक गुण फ़ाइल का उपयोग स्प्रिंग में किया जाता हैApplicationContext, इसके गुणों को इस तरह से एक्सेस किया जा सकता है: आपकी xml कॉन्फ़िगरेशन फ़ाइलों के अंदर $ {someproperty}। लेकिन आप अपने java कोड के अंदर xml के माध्यम से इंजेक्शन लगाए बिना उसी संपत्ति का उपयोग कैसे करते हैं?
ApplicationContext config
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="myapp.properties" />
</bean>
<bean class="my.app.MyClass">
<property name="foo" value="${someproperty}" />
</bean>
</beans>
गुण
someproperty=somevalue
अद्यतन 1
इसका वास्तविक बिंदु, एक विशेष मामला है जहांअनुप्रयोग के लिए एक अद्वितीय आईडी गुण फ़ाइल (sysadmin द्वारा ईज़ी संपादन) में सेट की गई है। कई एप्लिकेशन क्लासेस ApplicationContextAware को लागू करते हैं, इसलिए उनके पास संदर्भ तक पहुंच होती है और प्रत्येक कक्षा में इंजेक्शन लगाने से रोकने के लिए या हर वर्ग के लिए बीन को परिभाषित करने के लिए हम एक ez संपत्ति एक्सेस विधि चाहते हैं। वसंत के बारे में हमारा ऐप "जानना" इस मामले में कोई समस्या नहीं है।
उत्तर:
जवाब के लिए 3 № 1यह किसी भी संपत्ति का उपयोग करने के लिए कोई मतलब नहीं है, यह आईओसी सिद्धांत का खंडन करता है, वसंत का मुख्य उद्देश्य। अन्य उत्तरों के अतिरिक्त, आपको सभी गुणों की आवश्यकता हो सकती है? इस मामले में क्या है? PropertiesFactoryBean
वस्तु जो आपको दे सके Properties
सभी संपत्तियों के लिए उपयोग की वस्तु।
The PropertyPlaceholderConfigurer
बीन को स्प्रिंग संदर्भ में प्लेसहोल्डर्स बदलने के लिए डिज़ाइन किया गया है ।किसी भी अंय usages सिर्फ भ्रमित कर रहे हैं ।
उत्तर № 2 के लिए 1
अच्छा शैली अपने कोड के रूप में संभव के रूप में वसंत के बारे में थोड़ा जानने है, लेकिन आप के माध्यम से यह सुई कर सकते है @Value
एनोटेशन (आप "स्प्रिंग 3 का उपयोग कर पुनः) जो आप संपत्ति या निर्माता पर डाल दिया (आप अपनी सेम का निर्माण कैसे पर निर्भर करता है) प्रदान की ।अंयथा, आप कर सकते हैं यह webapp "s विंयास से बाहर उठाओ, लेकिन मेरे अनुभव में है कि" काफी अधिक त्रुटि प्रवण एस ।(यह वसंत के साथ करने के बारे में अंय अच्छी बात यह है कि यह आसान जटिल ओवरराइड नियमों के साथ कई विभिंन स्रोतों से गुणों को मर्ज करने के लिए बनाता है ।कर रही है कि मैंयुअल रूप से दर्दनाक है.)
जवाब के लिए 0 № 3
मैं placeHolderConfig
बीन (जैसे applicationContext से या इंजेक्शन द्वारा), PropertyPlaceholderConfigurer इस के लिए एक पहुँच विधि है, यहाँ एक नज़र है: