2013-11-21 28 views
3

在HK2配置注入的基本示例代碼是一個擴展AbstractBinder這個(中類:如何配置HK2注入由工廠方法創建的對象?

bind(BuilderHelper 
    .link(FooImpl.class) // the class of the object to be injected 
    .to(FooInterface.class) // identifies what @Inject fields to link to 
    .build()); 

這將導致HK2調用構造函數FooImpl()時,它需要創建一個FooInterface

如果什麼FooImpl沒有一個構造函數?

  • 如果什麼它旨在與靜態工廠方法實例化FooImpl.getInstance()
  • ,如果那是什麼intented由工廠對象實例化fooFactory.create()

我看到ResourceConfig有一個方法bind(FactoryDescriptors factoryDescriptors)但我不明白的成語是什麼建立一個FactoryDescriptors對象,一直沒能夠在網上找到任何例子。

回答

3

雖然我仍然無法找到一種方式來做到這一點使用BuilderHelper EDSL(看來這是大材小用對於通常的情況也是如此),以下工作:

bindFactory(FooFactory.class) 
     .to(FooInterface.class); 

這就要求FooFactory是執行Factory<FooInterface>,所以你需要在你現有的任何工廠周圍建立一個立面。我做了一個私人內部課,我需要它。

private static class FooFactory implements Factory<FooInterface> { 

    @Override 
    public void dispose(FooInterface foo) { 
     // meh 
    } 

    @Override 
    public FooInterface provide() { 
     return SomeFactory.getInstance(); 
    } 
} 
2

當前hk2只支持Factory接口,用於創建具有特殊構造函數需求的對象。我們一直在考慮添加一個靜態方法構造函數或者做某種類型的CDI @Produces機制。很難確定哪些是值得的額外複雜性(我們非常努力保持輕量級)。

我認爲在上面的代碼示例中,您的私有靜態類需要實現Factory接口,對吧?

+0

糟糕。我糾正了它。謝謝。 – slim

+0

FWIW我認爲它很好,但HK2文檔需要使用它的一些例子。 – slim

+2

我添加了這個bug https://java.net/jira/browse/HK2-167來跟蹤添加更多關於工廠的例子。其他人在工廠使用EDSL也遇到了問題,所以我認爲這是一個常見問題 – jwells131313

相關問題