2010-02-21 11 views
7

मैं वसंत 3 है, जो अपने निर्माता तर्क के रूप में आदिम मान लेता में एनोटेशन आधारित विन्यास के साथ एक वर्ग कॉन्फ़िगर करने के लिए कोशिश कर रहा हूँ:स्प्रिंग: एनोटेशन आधारित विन्यास के साथ आदिम मूल्यों (गुण) के निर्माता इंजेक्शन

@Component 
class MyBean { 
    MyBean(String arg1, String arg2) { 
    // ... 
    } 
} 

और इस तरह के एक आवेदन संदर्भ:

<beans [...]> 
    <context:component-scan base-package="com.example" /> 
    <context:property-override location="/WEB-INF/example.properties" /> 
</beans> 

मैं यह निर्दिष्ट करने के लिए कुछ तरीका ढूंढने की कोशिश कर रहा हूं कि कन्स्ट्रक्टर तर्क गुण फ़ाइल से लिया जाना चाहिए। जाहिर है यह रचनाकारों के साथ काम करता है जो नियमित बीन्स लेते हैं (उदा। MyClass(Bean bean1, OtherBean bean2)), लेकिन केवल गुण?

मैं भी साथ स्प्रिंग 3 के @Value एनोटेशन और मूल्य के लिए एक ईएल अभिव्यक्ति, @Value("#{prop.Prop1}") arg1 की तरह निर्माता तर्क व्याख्या की कोशिश की है, लेकिन है कि या तो काम करने के लिए प्रतीत नहीं होता।

उत्तर

16

निम्नलिखित कोड <context:property-placeholder .../> साथ ठीक काम करता है:

@Component 
public class MyBean { 
    @Autowired 
    public MyBean(@Value("${prop1}") String arg1, @Value("${prop2}") String arg2) { 
     // ... 
    } 
} 

लेकिन <context:property-override .../>, एक बहुत ही विशेष बात यह है कि इसे यहाँ उपयुक्त नहीं है।

+0

क्या संपत्ति फ़ाइल में "myBean.prop1 = foo" या बस "prop1 = foo" होगा? यही है, गुण बीन नाम से scoped हैं? –

+0

संपत्ति फ़ाइल में 'prop1 = foo' होगा। अगर आपको 'myBean.prop1 = foo' की आवश्यकता है, तो' @ वैल्यू ("$ {myBean.prop1}" लिखें)। यह तरीका है कि कैसे <<संदर्भ: संपत्ति-प्लेसहोल्डर ... /> 'काम करता है। – axtavt

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