2015-02-14 27 views
5

I Avere dubbi su iniezione guizza. E 'possibile iniettare un valore di variabile @named in una variabile statica?iniezione guice in variabile statica

Ho provato

@Provides 
@Named("emp.id") 
public Integer getEmpId() { 
    return 2; 
} 

e tenta di iniettare questo valore variabile statica come

@Inject 
@Named("emp.id") 
private static Integer id; 

Ma il valore id ritorno nullo, quando ho rimosso modificatore statico id dato valore 1.

Che cosa sta succedendo davvero qui?

risposta

8

Guice non inserisce campi statici in base alla progettazione. È possibile request static injection ma this should be done only as a crutch:

Questa API non è raccomandato per uso generale perché subisce molti degli stessi problemi come fabbriche statiche: è goffa testare, rende dipendenze opaca, e si basa su stato globale.

Nel tuo caso si potrebbe aggiungere questo al tuo metodo di configure di avere il vostro campo statico iniettato da Guice:

requestStaticInjection(Foo.class); 

Se non si aggiunge questo l'intero verrà inizializzato a null (per default).

Non ho idea del motivo per cui id è stato impostato su 1 dopo aver rimosso il modificatore statico, tuttavia. Sembra che avrebbe dovuto essere impostato su 2 se il tuo modulo Guice era stato configurato correttamente.

+0

Spiacente, restituisce il valore 2 ... – Robin

0

Immagino di no. L'iniezione funziona sull'oggetto, la variabile statica su un tipo.