यदि ServiceLoader
अधिकतर आपकी आवश्यकताओं के अनुरूप है, तो यह कहता है कि आप कक्षा पथ पर फ़ाइलों की उपस्थिति के माध्यम से सेवा खोज की तलाश में हैं। ओएसजीआई क्या प्रदान करता है यह केवल एक छोटा सा हिस्सा है।
ओएसजीआई आपको गतिशील रूप से बंडल इंस्टॉल करने, सेवाओं का विज्ञापन करने, विज्ञापनों को निरस्त करने, और एप्लिकेशन चलने के दौरान सभी को अनइंस्टॉल करने देता है। इसके अलावा, सेवाओं के उपभोक्ता के रूप में, आप उन्हें उत्सुकता से देख सकते हैं - फ़िल्टरिंग अनुमानित प्रश्नों के साथ - और जब सेवा प्रदाता आते हैं और जाते हैं तो पता लगाते हैं। इन बंडलों को कक्षा पथ पर झूठ बोलने की आवश्यकता नहीं है, और उन्हें विभिन्न रूपों में प्रदान किया जा सकता है; जार फाइलें और "विस्फोट निर्देशिका" दो याद हैं।
इसके विपरीत, ServiceLoader
केवल एक चीज है: यह खोजने योग्य कारखानों का खुलासा करता है। आम तौर पर आप एक फैक्ट्री-शैली इंटरफ़ेस तैयार करेंगे जो यह तय करने के लिए कुछ तर्क लेता है कि वह प्रदाता उपयुक्त सेवा प्रदान कर सकता है, जैसे किसी दिए गए वर्ण सेट नाम को CharsetDecoder
पर मैप करना। ऐसे प्रदाता से सेवा प्राप्त करने और जारी करने के लिए कोई औपचारिक प्रोटोकॉल नहीं है। ओएसजीआई सेवाओं के लिए उपभोक्ताओं के बाध्यकारी और बाध्यकारी औपचारिकता करता है। उपभोक्ता अधिसूचना प्राप्त कर सकता है जब नए प्रदाता ऑनलाइन आते हैं, और जब उपभोक्ता एक सेवा उदाहरण प्राप्त करता है और जारी करता है तो प्रदाता अधिसूचना प्राप्त कर सकता है। यदि यह जीवन चक्र नियंत्रण आपकी सेवा के लिए महत्वपूर्ण है और आप ओएसजीआई से गुजरते हैं, तो आपको इसे स्वयं बनाना होगा; ServiceLoader
अब तक नहीं जाता है।
वैकल्पिक सेवा लुकअप और उपयोग के बजाय वैकल्पिक रूप से, आप अधिक निष्क्रिय, घोषणात्मक दृष्टिकोण ले सकते हैं और ओएसजीआई निर्भरता प्रबंधकों में से एक को उपलब्ध सेवा प्रदाताओं को आपकी निर्दिष्ट आवश्यकताओं से मेल खाते हैं। से चुनने के लिए कई निर्भरता प्रबंधक हैं। Spring Dynamic Modules सबसे सक्षम है।
ओएसजीआई कई अन्य "मिडलवेयर" सुविधाएं प्रदान करता है। मैं आपको यहां उन पर बेचने की कोशिश नहीं करूंगा, क्योंकि आपका प्रश्न अधिकतर ServiceLoader
चुनकर आप जो खो रहे हैं उस पर केंद्रित है।
धन्यवाद - वास्तव में यह जानना मुश्किल है कि ओएसजीआई क्या है।नहीं, मुझे वास्तव में केवल सर्विसलोकेटर की आवश्यकता है, और मैं सराहना करता हूं कि यह बनाया गया है। मैं बस संदिग्ध था, इससे पहले कि मैंने सोचा कि यह रोगग्रस्त या कुछ होना चाहिए। –
मैं वर्तमान प्रोजेक्ट पर 'सर्विसलोडर' का उपयोग करता हूं, और मुझे मिली केवल निराशाएं 1) कक्षा पथ पर जार फ़ाइलों के रूप में विस्तार को धक्का देने की आवश्यकता के साथ (हमारे अनुप्रयोग कक्षा पथ के साथ अंतिम उपयोगकर्ता को झुकाव नहीं देते हैं) , और 2) अनिर्दिष्ट आदेश जिसके द्वारा एक ही सेवा इंटरफ़ेस के भाई प्रदाता उपभोक्ता के संपर्क में आ जाएंगे। उत्तरार्द्ध में "प्राथमिकता" को शामिल करना मुश्किल हो जाता है, जैसे उपयोगकर्ता द्वारा प्रदान किए गए एक्सटेंशन एप्लिकेशन की मूल सेवाओं के लिए बेहतर होना चाहिए। इसलिए, 'ServiceLoader' का सबसे अच्छा उपयोग किया जाता है जब प्रदाता एक दूसरे के साथ ओवरलैप या प्रतिस्पर्धा नहीं करेंगे। – seh