2013-08-26 18 views
8

Sono ancora nuovo in Guice e non ho mai utilizzato alcun framework DI. Dopo aver letto la wiki ufficiale e molti altri documenti non riesco ancora a spiegarmi completamente.Guice - Iniettare dipendenza in una classe con metodi di supporto statici

Nel mio caso particolare, voglio scrivere una funzione di taglib EL che utilizza un'altra classe (da iniettare). Poiché tutte le funzioni di taglib devono essere dichiarate come statiche, non posso semplicemente @Inserire la mia dipendenza tramite costruttore o setter. Ho pensato di utilizzare il metodo requestStaticInjection() descritto in http://code.google.com/p/google-guice/wiki/Injections#Static_Injections ma non sono riuscito a farlo funzionare e non sono riuscito a trovare alcun tutorial valido.

Grazie in anticipo per qualsiasi aiuto,

Arman

+2

"Non riesco a farlo funzionare" Allora, cosa hai provato? –

risposta

16

Non ottiene molto più chiaro di quello documentazione Guice ma qui è una prova di unità che mostra un esempio di come è possibile utilizzare l'iniezione statica:

public class StaticInjectionExample { 

    static class SomeClass {} 

    static class TagLib{ 
    @Inject 
    static SomeClass injected; 

    public static void taglibFunction(String foo) { 
     injected.something(foo); 
    } 

    } 

    static class TestModule extends AbstractModule { 
    @Override 
    protected void configure() { 
     requestStaticInjection(TabLib.class); 
    } 
    } 

    @Test 
    public void test() { 
    Injector injector = Guice.createInjector(new TestModule()); 
    TagLib receiver = injector.getInstance(TagLib.class); 
    // Do something with receiver.injected 
    } 
} 
+0

Grazie per la vostra risposta. Ci proverò. Ma onorerà questa deputazione iniettata da altri Iniettori? Ad esempio, Guice utilizzerà la stessa istanza se la classe iniettata è stata contrassegnata come @Singleton? – Arman

+0

Non sono sicuro di cosa intenda per "altri iniettori". Se si associa 'Injected' come' @ Singleton', quell'istanza singola verrà utilizzata durante l'iniezione (inclusa l'iniezione statica) per l'intero modulo. – condit

+0

Secondo la documentazione di Guice, normalmente si crea un iniettore all'interno di un progetto Web all'interno di un ServletContextListener che estende GuiceServletContextListener. Quindi, se creo un Injector aggiuntivo all'interno di qualche classe, Guice inietterà la stessa classe @Singleton come avrebbe il "ServletContextListener-Injector"? – Arman

Problemi correlati