मैं अपने ऐप + बिल्ड सिस्टम के साथ बड़े पैमाने पर इसे आजमाने की कोशिश करता हूं, लेकिन उच्च प्राथमिकताएं इसे बैक बर्नर पर धक्का देती रहती हैं। यह गुइस मॉड्यूल लोड करने का एक अच्छा तरीका प्रतीत होता है और "हार्ड कोडेड कॉन्फ़िगरेशन" के बारे में सामान्य शिकायत से बचाता है। व्यक्तिगत कॉन्फ़िगरेशन गुण शायद ही कभी स्वयं ही बदलते हैं, लेकिन आमतौर पर आपके पास हमेशा अलग-अलग वातावरण (डीबग, प्रोडक्शन इत्यादि) के लिए प्रोफ़ाइल का एक सेट होगा।क्या किसी ने गिसिस के साथ सर्विसलोडर का उपयोग किया है?
सर्विसलोडर आपको किसी दिए गए प्रकार के लिए सेवा के रूप में परिभाषित सभी कार्यान्वयन की एक सूची खींचने देता है।
import java.util.ServiceLoader;
import com.google.inject.AbstractModule;
import com.google.inject.Module;
public class ModuleLoader<M extends Module> extends AbstractModule {
private final Class<M> type;
public ModuleLoader(Class<M> type) {
this.type = type;
}
public static <M extends Module> ModuleLoader<M> of(Class<M> type) {
return new ModuleLoader<M>(type);
}
@Override
protected void configure() {
ServiceLoader<M> modules = ServiceLoader.load(type);
for (Module module : modules) {
install(module);
}
}
}
प्रयोग उदाहरण (क guice-सर्वलेट परियोजना में एक गतिशील सर्वलेट लोडर के रूप में): Guice के साथ मिलकर इस लाना, आप के साथ अंत
import com.google.inject.servlet.ServletModule;
public class ServletLoader extends GuiceServletContextListener {
@Override
protected final Injector getInjector() {
return Guice.createInjector(ModuleLoader.of(ServletModule.class);
}
}
सेवाएं (मॉड्यूल के रूप में पैक) होगा अलग जार फ़ाइलों में पैक किया गया। हर एक को आप मेटा डेटा में वर्ग (ते) निर्धारित करेंगे भीतर:
Within servlets.jar: META-INF/services/com.google.inject.Module
com.example.webapps.MyServletModuleA
com.example.webapps.MyServletModuleB
जब से हम Maven का उपयोग, हमें लगता है के रूप में हम प्रोफ़ाइल निर्भरता के माध्यम से कार्यावधि में विभिन्न कार्यान्वयन में खींच सकता है यह आदर्श होगा। क्या कोई इस तरह गुइस का उपयोग कर रहा है?
यदि नहीं, तो इस उदाहरण का उपयोग करने में संकोच न करें और देखें कि यह आपके लिए कैसे काम करता है। (सर्विसलोडर केवल जेडीके 6 + में समर्थित है)
क्या आप मदद कर सकते हैं? मैं कुछ ऐसा करने की कोशिश कर रहा हूं लेकिन सर्विसलोडर के साथ नोबॉई समस्या है? http://stackoverflow.com/questions/28983997/java-cant-get-a-working-serviceloader – tommed