2013-05-08 24 views
0

我想知道什麼是對下列問題的最佳實踐:吉斯:創建具有不同配置的多個對象實例

我想有一些類的2個實例(BlockingQueue的特別)將其注入到我的其他班級。每個實例都是單獨配置的(特別是它們具有不同的容量),並且它們不支持通過@Inject註釋進行自動注入。這兩個實例是該應用程序中該類的唯一兩個實例。

現在,我知道我可以使用綁定註釋區分這兩個實例,並使用實例綁定實際綁定到單個實例。但問題是我也需要配置這兩個對象,我想從Guice獲得配置依賴關係。你認爲最好的辦法是做什麼?

回答

1

一種選擇是使用@Provides bindings

您吉斯模塊,它提供的依賴中創建的方法。您可以在方法簽名中添加構建對象所需的依賴關係。

@Provides 
@MyBindingAnnotation 
@Singleton 
BlockingQueue<String> provideBlockingQueue(MyGuiceManagedConfig config){ 
    return new LinkedBlockingQueue<String>(config.getCapacity()); 
} 

...他們不通過@Inject註釋

支持自動注射順便說一句,吉斯有一個功能叫做constructor bindings,這使得它可以綁定構造不@Inject

try { 
    binder().bind(Integer.TYPE).toInstance(10); 

    binder().bind(new TypeLiteral<BlockingQueue<String>>() {}) 
     .toConstructor(LinkedBlockingQueue.class.getConstructor(Integer.TYPE)); 
} catch (NoSuchMethodException e) { 
    addError(e); 
} 
相關問題