2014-11-24 88 views
0

我有一種情況,我需要在大約40個實例中將接口I綁定到類A,但只在其他兩個實例中將其綁定到類B.我當然可以命名它,或者在所有42個案例中對它進行註釋,但是如果我只能註釋2個例外,它會更加乾淨。是否有可能特別針對所有沒有註釋的實例?Guice:綁定沒有註釋的參數

+0

作爲興趣點,在hk2中,您可以專門@注入一些不符合特定註釋條件的東西。請參閱https://hk2.java.net/2.4.0-b06/apidocs/org/glassfish/hk2/api/Unqualified.html。我們不時發現這樣的事情很有用 – jwells131313 2014-12-01 19:47:15

回答

3

你不必針對那些需要A實現的注入點 - 你只需要爲它們寫一個綁定。回想一下,Guice中的每個綁定都以Key表示,並確保爲兩種情況都添加一個綁定。這樣,任何I沒有綁定註釋得到A和任何I正確註釋得到B

static interface I {} 
static class A implements I {} 
static class B implements I {} 

static class C { 
    @Inject I a; 
    @Inject @Named("b") I b; 
} 

static class Module extends AbstractModule { 
    @Override 
    protected void configure() { 
    bind(I.class).to(A.class); 
    bind(I.class).annotatedWith(Names.named("b")).to(B.class); 
    } 
} 

@Test 
public void test() { 
    Injector i = Guice.createInjector(new Module()); 
    C c = i.getInstance(C.class); 
    assertThat(c.a, is(instanceOf(A.class))); 
    assertThat(c.b, is(instanceOf(B.class))); 
}