2011-03-11 7 views
27

स्प्रिंग 3.0.5.RELEASE में एक सेम के लिए ऑटो-तार गुण की कोशिश कर रहा से @value एनोटेशन का मूल्यांकन नहीं है, मैं उपयोग कर रहा हूँ:वसंत 3.0.5 गुण

  • config.properties:

    username=myusername 
    
  • main-components.xml:

    <context:property-placeholder location="classpath:config.properties" /> 
    
  • MyClass:

    @Service 
    public class MyClass { 
    
        @Value("${username}") 
        private String username; 
        ... 
    } 
    

नतीजतन, उपयोगकर्ता नाम सचमुच"${username}" करने के लिए सेट हो जाता है, तो अभिव्यक्ति पार्स नहीं होती है। इस वर्ग पर मेरी अन्य ऑटो वायर्ड निर्भरताएं सेट हो जाती हैं, और वसंत कोई अपवाद नहीं फेंकता है। मैंने @Autowired जोड़ने की भी कोशिश की लेकिन इससे मदद नहीं मिली।

अगर मैं एक अलग सेम के गुणों को पार्स और फिर @Autowired + @Qualifier उपयोग करते हैं, यह काम करता है:

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

कोई भी विचार कैसे सिर्फ @Value उपयोग करने के लिए? शायद मुझे कुछ वसंत निर्भरता शामिल करने की ज़रूरत है जो मैंने नहीं किया है? धन्यवाद

+16

क्या आप सुनिश्चित हैं कि आपके पास 'संदर्भ: संपत्ति-प्लेसहोल्डर>' उसी एप्लिकेशन संदर्भ में आपके 'MyClass' बीन (मूल संदर्भ में नहीं) के रूप में है? – axtavt

+0

आप सही हैं। मैं संदर्भ संदर्भ में ContextLoaderListener द्वारा परिभाषित संदर्भ से <संदर्भ: संपत्ति-प्लेसहोल्डर> स्थानांतरित कर दिया। अब मेरे मूल्य पार्स हो जाते हैं। आपका बहुत बहुत धन्यवाद! –

+1

यहां करने के लिए बहुत उपयोगी चीज है अनदेखी-अनदेखी-प्लेसहोल्डर को झूठी करने के लिए सेट करना - इस प्रकार एप्लिकेशन विफल हो जाएगा यदि यह प्लेसहोल्डर को हल नहीं कर सकता है - जो आपकी समस्या –

उत्तर

18

मिला कि समस्या क्या थी। टिप्पणियों से प्रतिलिपि/पेस्ट करें:

क्या आप सुनिश्चित हैं कि आपके पास माइक्रैस बीन (मूल संदर्भ में नहीं) के समान एप्लिकेशन संदर्भ में <context:property-placeholder> है? - एक्स्टाव

आप सही हैं। मैंने द्वारा सर्वलेट संदर्भ में परिभाषित संदर्भ से <context:property-placeholder> स्थानांतरित किया। अब मेरे मूल्य पार्स हो जाते हैं। आपका बहुत बहुत धन्यवाद! - एलेक्स