2015-02-14 33 views
5

Guice enjeksiyonu konusunda şüphem var. Bir statik değişkene bir @ adlandırılmış değişken değeri enjekte edilebilir mi?Statik değişkede guice enjeksiyonu

I

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

denenmiş ve bu I kimliği değeri 1 verdi statik düzenleyiciyi uzaklaştırıldı

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

Ancak id dönüş değeri boş, statik değişkene bu değeri enjekte çalıştık.

Burada gerçekten neler oluyor?

cevap

8

Guice, tasarım tarafından statik alanlar enjekte etmez. Sen request static injection ama this should be done only as a crutch edebilirsiniz: bunun bağımlılık opak olmasını sağlamaz, aynı test etmek hantal, ve küresel devlet dayanır: statik fabrikalar aynı sorunların çoğunu uğrar çünkü

Bu API genel kullanım için tavsiye edilmez. Varsayılan olarak (bu Tamsayı eklemezseniz

requestStaticInjection(Foo.class); 

null başlatılır: Senin durumunda

Eğer statik alan Guice enjekte bulunması için configure yönteme bu ekleyebilir).

Ancak, statik değiştiriciyi kaldırdıktan sonra neden id'un 1 olarak ayarlandığından hiçbir fikrim yok. Guice modülünüz doğru şekilde ayarlanmışsa 2'ye ayarlanmış gibi görünüyor.

+0

Üzgünüm, 2 değerini döndür ... – Robin

0

Sanırım değil. Enjeksiyon nesne üzerinde çalışır, bir türdeki statik değişken.