जैसे कार्यान्वयन को गतिशील रूप से इंजेक्ट करने के लिए @Autowired का उपयोग कैसे करें मैं स्प्रिंट के लिए बिल्कुल नया हूं और मेरे आवेदन के लिए वसंत 3.x और roo1.1.1 का उपयोग कर रहा हूं।एक कारखाने पैटर्न
मेरे पास एक इंटरफ़ेस का एकाधिक कार्यान्वयन है जो @ अन्य विभिन्न वर्गों में उपयोग किया जाएगा। मैं केवल यह तय करने में सक्षम होगा कि रनटाइम पर किस कार्यान्वयन के साथ जाना है। यह एक कारखाने पैटर्न की तरह हासिल किया जाना चाहिए।
public interface SomeInterface {
public void doSomething();
}
कार्यान्वयन 1.
public class SomeOb implements SomeInterface {
public void doSomething() {
//Do something for first implementation here
}
}
कार्यान्वयन 2.
public class SomeOtherOb implements SomeInterface {
public void doSomething() {
//Do something for first implementation here
}
}
अब मेरी सेवा में मैं इस Autowired
@Service
public class MyService {
@Autowired
SomeInterface ob;
//Rest of the code here
}
1) तर्क चयन करने के लिए की तरह की जरूरत है जो कार्यान्वयन के लिए कार्यान्वयन प्रसारित केवल रनटाइम पता है, इसलिए मैं इसे अर्हता प्राप्त करने के लिए @ क्वालिफायर एनोटेशन का उपयोग नहीं कर सकता। 2) मैं की तरह
public class SomeFactoryBean implements FactoryBean<SomeInterface> {
@Override
public SomeInterface getObject() throws Exception {
if(/*Somecondition*/) {
return new SomeOb();
} else
return new SomeOtherOb();
}
@Override
public Class<? extends SomeInterface> getObjectType() {
if(/*Somecondition*/) {
return SomeOb.class;
} else
return SomeOtherOb.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
applicationContext.xml मैं टैग उल्लेख किया है में एक FactoryBean बनाने की कोशिश की।
मैं की तरह
No unique bean of type [com.xxxx.xxxx.SomeInterface] is defined: expected single matching bean but found 3: [xxxx, xxxxxxx, xxxxFactory]
एक त्रुटि में चलाने किसी को भी कृपया मुझे इस समस्या को हल करने के लिए मदद कर सकते हैं जब मैं वेबसर्वर चलाते हैं। अगर मैं यह सही नहीं कर रहा हूं तो कृपया मुझे सही तरीके से ऐसा करने के लिए निर्देशित करें।
धन्यवाद और सराहना किसी भी मदद, JJK isSingleton() से