singleton - Spring and @Autowired - when does the autowiring take place? -


मेरे पास एक ऐसा वर्ग है जो इस तरह कार्य करता है:

  @Component public class MyClass {@ Autowired public void setDataSource (DataSource dataSource) {...} सार्वजनिक void doSomethingUsingDataSource () {// autowired datasource का उपयोग करें}}   

मेरे applicationContext.xml इसमें शामिल हैं:

 <कोड> & lt; संदर्भ: लोड समय-बुनकर / & gt; & Lt; संदर्भ: घटक-स्कैन बेस-पैकेज = "mypackage" / & gt;   

अगर मैं किसी अन्य वर्ग में एक MyClass को इन्स्तांत करता हूं तो यह ठीक काम करता है:

  MyClass MC = नया MyClass (); mc.doSomethingUsingDataSource ();   

हालांकि, अगर MyClass बजाय एक सिंगलटन है:

  @Component सार्वजनिक वर्ग MyClass {निजी स्थिर MyClass mc; @ एटोवायर पब्लिक व्हॉइड सेटडेटासोर्स (डेटासोर्स डेटासॉर्स) {...} प्राइवेट व्होइड डूमेमिंग यूटिंगडेटास () {// उपयोग ऑटोरेयर डाटसोर्स} पब्लिक स्टैटिक व्हॉइड डूसमिंग () (यदि (एमसी == रिक्त) {एमसी = नया माइक्लास (); } Mc.doSomethingUsingDataSource (); }}   

और मैं कॉल करता हूं

  MyClass.doSomething ();   

तब मुझे एक एनपीई मिलता है क्योंकि डेटासॉर्स रिक्त है।

क्या स्प्रिंग डेटासेट को सेट करने में असमर्थ है अगर मेरी क्लास का एक नया उदाहरण इस तरीके से बनाया गया है? या क्या मुझे अपना कॉन्फ़िगरेशन थोड़ा बदलना है? पहला संस्करण काम करता है, इसलिए मेरा मानना ​​है कि मेरा कॉन्फ़िगरेशन सही है।

धन्यवाद,

पॉल

अंत में मैंने इसे ऑटोवायरिंग को निकालकर काम किया मैंने अपने वर्ग को ApplicationContextAware को कार्यान्वित किया और setApplicationContext विधि में डेटा स्रोत को सेट किया है, जैसे:

  सार्वजनिक शून्य सेटअनुप्रयोग कॉन्टैक्स (अनुप्रयोगकॉन्टेक्स्ट एसी) ने बीन्स अप्स्पेक्शन {सेटडेटासोर्स (डेटासॉर्स) एसी.ए.टी.बी.बी.एन. ")); }   

ऐसा करने से मैं अपनी कक्षा को स्थिर तरीके से एक सिंगलटन रखने में सक्षम था।

पॉल

Comments