2016-01-29 50 views
0

我在我的Jersey應用程序中使用HK2。綁定類我使用的是居民生成器maven插件。HK2居民生成器:如何將工廠綁定到註釋服務?

對於我的一個類,我需要使用工廠來生成一個實例。結合我的應用程序類作品中的工廠預期:

register(new AbstractBinder() { 

    @Override 
    protected void configure() { 
     bindFactory(ClientManagerFactory.class).to(ClientManager.class); 
    } 
}); 

的問題是,我的居民文件beeing只要我註冊了抽象的粘合劑忽略。

如何綁定通過註釋的工廠(不使用編程粘結劑在所有

如果這是不可能的HK2:如何使用AbstractBinder用於需要一個工廠類,並使用居民文件對於所有其他

更新: 我廠是這樣的:

public class ClientManagerFactory implements Factory<ClientManager> { 

    @Override 
    public ClientManager provide() { 
     return ClientManager.fromSettings(); 
    } 

    @Override 
    public void dispose(ClientManager instance) { 
     instance.cleanupResources(); 
    } 

} 
+0

沒有工廠,您目前如何從居民文件創建的ServiceLocator與澤西島合作? –

+0

我也想看看你的工廠代碼,特別是你對提供方法的註釋。我們有很多測試顯示工廠可以與hk2-inhabitant-generator一起使用 – jwells131313

+0

@ jwells131313我在原始文章中添加了工廠代碼。我沒有任何註釋 - 我必須添加任何? – gorootde

回答

3

工廠是一種服務,是略特因爲... e工廠的提供方法是也是一個服務,所以一個工廠類產生兩個hk2服務。這意味着工廠本身可以注入其他服務。但這也意味着,在使用自動服務發現(hk2-metadata-generator或hk2-inhabitant-genertor)時,您需要使用@Service對其進行註釋。

請注意,工廠的範圍和提供方法的範圍可能不同。事實上,如果您將任何作用域註釋從提供方法中移除,默認情況下它將位於PerLookup範圍內。我已經修改了你的代碼從上面使其成爲一個工廠,兩個工廠和提供方法,服務都在Singleton範圍:

@Service 
public class ClientManagerFactory implements Factory<ClientManager> { 

    @Override @Singleton 
    public ClientManager provide() { 
     return ClientManager.fromSettings(); 
    } 

    @Override 
    public void dispose(ClientManager instance) { 
     instance.cleanupResources(); 
    } 

} 

作爲一個方面說明,當你使用@Service默認範圍變得Singleton這是爲什麼提供方法(其上不能有@Service)默認在PerLookup範圍內。限定符也可以放在提供方法上,在這種情況下,由提供方法返回的服務將使用這些限定符進行限定。

相關問題