2012-10-22 101 views
2

比方說,我有這個類:可以繼承Guice的@Singleton註解嗎?

@Singleton 
public class Parent { ... } 

這個類:

public class Child extends Parent { ... } 
在我的Java應用程序

,和我的應用程序依賴於吉斯注射來創建對象。如果我創建了一個ChildInjector.createInstance(Child.class)的實例,那麼該實例是否會自動成爲單例(因爲父類被標註爲單例),還是我需要明確地將@Singleton註釋添加到Child

+1

註釋通常不會被繼承,但爲什麼不試試看看會發生什麼? –

+4

如果您也可以創建子類,父母如何是單身人士?一旦你有一個Parent實例和一個Child實例,Parent就不再是單身。 –

回答

5

不 - 你也需要註釋Child。你可以設置一個簡單的測試來驗證這一點:

public class GuiceTest { 

    @Singleton 
    static class Parent {} 

    static class Child extends Parent{} 

    static class Module extends AbstractModule { 
    @Override 
    protected void configure() { 
     bind(Parent.class); 
     bind(Child.class); 
    } 
    } 

    @Test 
    public void testSingleton() { 
    Injector i = Guice.createInjector(new Module()); 
    assertNotSame(i.getInstance(Child.class), i.getInstance(Child.class)); 
    } 

}