Come altri hanno già risposto, è possibile utilizzare semplicemente @ Inject Injector perché Guice definisce l'associazione stessa.
Normalmente è necessario un solo iniettore nell'app e una variabile statica è un modo ancora più semplice per archiviare e accedere a un singoletto piuttosto che iniettarlo. Nella nostra app Web, usiamo stripes-guicer e riceviamo l'iniettore dal suo metodo statico GuiceInjectorFactory.getInjector() quando ne abbiamo bisogno (nel nostro intercettore Hibernate, ad esempio).
Sono un po 'sconcertato dal consiglio che "non si dovrebbe usare l'iniettore direttamente". In quale altro modo avrei ricevuto un'istanza iniettata, tranne chiamando injector.getInstance() o injector.injectMembers()? Non c'è alcun modo. Sì, puoi definire i metodi Provider, ma non verranno mai chiamati a meno che da qualche parte, qualcosa usi un iniettore. Sì, ci sono moduli che utilizzano l'iniettore per te come il ServletModule; devi creare l'Injector da solo, ma puoi lasciarlo successivamente al ServletModule.
Quindi in alcune circostanze è possibile evitare di utilizzare direttamente l'iniettore, ma ciò non significa che non si debba "usarlo". Se stai usando Guice da solo senza moduli opzionali, allora dovresti "usare" un iniettore dappertutto perché non c'è altro modo per attivare l'iniezione. (Penso che gli sviluppatori che passano tutto il giorno a scrivere il codice all'interno dei framework a volte dimentichino che alcune persone realizzano istantaneamente i propri oggetti.)
fonte
2011-06-06 17:47:44
Thx! Ci proverò per l'inizializzazione pigra. Ma non c'è davvero alcun modo di iniettare Injector? –
È possibile ottenere l'iniettore con 'iniettore iniettore @Inject', può essere sul costruttore/campo/metodo. – gpampara
Hai provato questo? Come configurare il modulo? Guice limita l'associazione alle classi core: "Non è consentito legare al tipo di framework guice principale: Injector." –