मेरी निर्भरता का 99% @Autowired स्प्रिंग एनोटेशन के माध्यम से डी पैटर्न के साथ प्रबंधन है।वसंत सेवा लोकेटर या शुद्ध कारखाना पैटर्न?
फिर भी एक विशेष परिदृश्य में, मैं निर्धारित नहीं कर सकता कि रन-टाइम तक कौन सा कार्यान्वयन किया जाना चाहिए।
सबसे ज्ञात मामला, पार्सर्स के कई कार्यान्वयन है।
पहला समाधान कई @Autowired (बदसूरत मोड) का इस्तेमाल किया करने के लिए
Interface Parser {
<T> T parse();
}
@Component("JsonParser")
class JsonParser implements Parser {
...
}
@Component("XmlParser")
class XmlParser implements Parser {
...
}
class MyService {
@Autowired
@Qualifier("XmlParser")
Parser xmlParser;
@Autowired
@Qualifier("JsonParser")
Parser jsonParser;
...
}
है लेकिन अगर मैं कार्यान्वयन की एक बड़ी संख्या है स्वीकार्य नहीं हो सकता है।
दूसरा समाधान स्प्रिंग
interface ParserServiceLocatorFactory {
public Parser getParser(String parserName);
}
interface Parser {
<T> T parse();
}
@Component("JsonParser")
class JsonParser implements Parser {
...
}
@Component("XmlParser")
class XmlParser implements Parser {
...
}
class MyService {
@Autowired
ServiceFactory parserServiceLocatorFactory;
void exampleMethod() {
Parser xmlParser = parserServiceLocatorFactory.getParser("XmlParser");
}
}
से ServiceLocator इस्तेमाल किया इस तरह से मेरे लिए सही लगता है, लेकिन तीसरे समाधान के साथ तुलना करने के लिए है?
तीसरा समाधान शुद्ध फैक्ट्री पैटर्न का उपयोग करना और इसे इंजेक्ट करना है।
@Component
public ParserFactory {
Parser getParser(String parserName) {
...
}
}
interface Parser {
<T> T parse();
}
@Component("JsonParser")
class JsonParser implements Parser {
...
}
@Component("XmlParser")
class XmlParser implements Parser {
...
}
class MyService {
@Autowired
ParserFactory parserFactory
void exampleMethod() {
Parser xmlParser = parserFactory.getParser("XmlParser");
}
}
आप समर्थक पिछले समाधान, या मेरी समस्या के लिए भी बेहतर समाधान के लिए/चोर है, तो?
पुनश्च: यह छद्म कोड है मैं तुम्हें सूची इंजेक्शन का उपयोग कर सकते एक विकल्प के रूप में कुछ छोटी बातों :)
हम एक सूची के लिए @ संभव है? मुझे पता है कि एक्सएमएल का उपयोग करना संभव है लेकिन मैंने एनोटेशन के बारे में कभी नहीं सुना। क्या आपके पास कुछ डॉक्टर लिंक हैं? – Kakawait
हां, यह संभव है। मैं वास्तव में अपने वर्तमान प्रोजेक्ट में इस दृष्टिकोण का उपयोग कर रहा हूं। [टाइप किए गए संग्रह उदाहरण पर जाएं] (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-autowired-annotation)। –
ऊपर सुझाए गए दृष्टिकोण में मामूली संशोधन पार्सर प्रकारों के एमएपी संग्रह का उपयोग करना होगा। इस तरह, आप नक्शा कुंजी का उपयोग करके निरंतर समय में लुकअप कर सकते हैं जो कि प्रकार का नाम है। जब भी आप एक पार्सर सेवा देखना चाहते हैं तो यह फॉर लूप से बच जाएगा। – Kingz