मैं एक स्थिति है जहाँ मैं गतिशील रूप से एक कारखाना वस्तु के माध्यम से एक वस्तु बनाने के लिए करना चाहते हैं, लेकिन वस्तु वसंत संदर्भ के माध्यम से बनाने की आवश्यकता है, उदाहरण के कारखाने पद्धति का उपयोग करना निर्भरता autowiring अनुमति देने के लिए। मुझे पता है कि कई अन्य तरीके हैं जिनसे मैं इस समस्या को हल कर सकता हूं - उदाहरण के लिए एक सेवा लोकेटर पैटर्न का उपयोग करना - लेकिन यदि संभव हो तो मैं इसे इस तरह से करना चाहूंगा।प्रोटोटाइप सेम बनाने के लिए गतिशील रूप से
कल्पना कीजिए मैं दो वस्तुओं है:
class OuterObject {
List<InnerObjectInterface> innerObjs;
...
}
class InnerObject implements InnerObjectInterface{
@Autowired
SomeDependency someDependency;
...
}
मैं एक कारखाने कि की तर्ज पर कुछ करता है बनाना चाहते हैं:
:class OuterObjectFactory {
private innerObject = new InnerObject();
public OuterObject construct(params){
OuterObject o = new OuterObject();
List<InnerObjectInterface> inners = new ArrayList<InnerObjectInterface>();
...
for(some dynamic condition){
...
inners.add(createInnerObject());
...
}
}
public createInnerObject(){
return innerObject;
}
}
मेरे वसंत-context.xml तरह दिखता होगा
<bean id="outerObjectFactory" class="path.OuterObjectFactory" />
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" />
हालांकि यह काम नहीं करता। केवल एक आंतरिक ऑब्जेक्ट कभी बनाया गया है, जहां मैं इसे कार्य करना चाहता हूं जैसे कि इसका दायरा = "प्रोटोटाइप" है। अगर मैं सेम परिभाषा के दायरे = "प्रोटोटाइप" जोड़ें:
<bean id="innerObject" class="path.InnerObject" factory-bean="outerObjectFactory" factory-method="createInnerObject" scope="prototype"/>
तो यह कई innerObjects बनाने के लिए लगता है, लेकिन वे सही ढंग से तार नहीं कर रहे हैं। मेरे सहकर्मी का मानना है कि दस्तावेज here पाया गया है कि फैक्ट्री बीन का उपयोग केवल बीन को शुरू करने के लिए किया जाता है, लेकिन मुझे यह स्पष्ट नहीं लगता है।
मैं अगर किसी को यहाँ मेरी समझ स्पष्ट कर सकता है यह बात कि सराहना करेंगे, और संभवतः भी मैं क्या कर रहा हूँ की तुलना में तारों के साथ कारखाने पैटर्न मॉडलिंग के लिए एक बेहतर तरीका सुझाव देते हैं।
धन्यवाद!
यह पता चला है कि यह वास्तव में प्रोटोटाइप सेम के लिए काम नहीं करता है। हालांकि यह मुझे विधि इंजेक्शन के लिए नेतृत्व करता है, जो समस्या को हल करता है - बिल्कुल साफ नहीं, लेकिन अभी भी अच्छी तरह से। धन्यवाद आटा – idbentley