मैंने एक स्प्रिंग @कॉन्फ़िगरेशन एनोटेटेड क्लास बनाया है और मैं इसे रिसोर्सलोडर को ऑटोवायर करना चाहता हूं ताकि मैं इसे स्ट्रिंग द्वारा दी गई फ़ाइल को देखने के लिए @Bean विधियों में से एक में उपयोग कर सकूं। जब मैं ऐप चला रहा हूं और संदर्भ शुरू कर रहा हूं तो मुझे ऑटोवायर्ड फ़ील्ड तक पहुंचने वाला एनपीई मिलता है, और डीबग मोड में इसे शून्य/सेट नहीं होने के रूप में दिखाया जाता है। क्या मैं रिसोर्सलोडर के उपस्थित होने की अपेक्षा गलत कर रहा हूँ? क्या मैं गलत तरीके से कह रहा हूं कि कॉन्फ़िगरेशन बीन की ऑटोवॉयरिंग इसके तरीकों को बुलाए जाने से पहले होती है? इस बीन को लोड करने वाले xml कॉन्फ़िगरेशन को <संदर्भ: एनोटेशन-कॉन्फ़िगरेशन /> के साथ टैग किया गया है

@Configuration
public class ClientConfig {

    @Autowired
    private ResourceLoader resourceLoader;

    public @Bean
    String configHome() {
        return System.getProperty("CONFIG_HOME");
    }

    public @Bean
    PropertiesFactoryBean appProperties() {
        String location = "file:" + configHome() + "/conf/webservice.properties";
        PropertiesFactoryBean factoryBean = new PropertiesFactoryBean();
        factoryBean.setLocation(resourceLoader.getResource(location));

        return factoryBean;
   }
}
3
Kai 18 नवम्बर 2011, 07:08

1 उत्तर

सबसे बढ़िया उत्तर

मुझे यकीन नहीं है कि यह एक बग है या अपेक्षित व्यवहार है। कभी-कभी यह मेरे लिए काम करता था, कभी-कभी नहीं। वैसे भी, आप जो चाहते हैं उसे प्राप्त करने का एक और तरीका है:

public @Bean PropertiesFactoryBean appProperties(ResourceLoader resourceLoader) {
    // resourceLoader is injected correctly
    ...
}
6
sinuhepop 18 नवम्बर 2011, 08:32
धन्यवाद, यह मेरे लिए काम किया। क्या आपने कभी यह पता लगाया कि यह क्यों काम करता है या यदि किसी वर्ग को ऑटोवायर करना सही है?
 – 
accasio
19 जून 2020, 14:11