[英]HK2 Inhabitant Generator: How to bind a factory to an annotated service?
我在Jersey應用程序中使用HK2。 為了綁定類,我正在使用居民生成器maven插件。
對於我的一個類,我需要使用工廠來產生實例。 將工廠綁定到我的應用程序類中可以正常工作:
register(new AbstractBinder() {
@Override
protected void configure() {
bindFactory(ClientManagerFactory.class).to(ClientManager.class);
}
});
問題是我注冊抽象活頁夾后,居民文件就被忽略了。
如何通過注釋綁定Factory(根本不使用程序化綁定器?
如果HK2無法做到這一點:如何將AbstractBinder
用於需要工廠的類,如何將居民文件用於所有其他工廠?
更新:我的工廠看起來像這樣:
public class ClientManagerFactory implements Factory<ClientManager> {
@Override
public ClientManager provide() {
return ClientManager.fromSettings();
}
@Override
public void dispose(ClientManager instance) {
instance.cleanupResources();
}
}
工廠是一種服務,由於工廠的提供方法也是一種服務,因此有點特殊,因此一個Factory類產生兩個hk2服務。 這意味着Factory本身可以注入其他服務。 但這也意味着,在使用自動服務發現(hk2-metadata-generator或hk2-inhabitant-genertor)時,您需要使用@Service對其進行注釋。
請注意,工廠范圍和provide方法的范圍可以不同。 實際上,如果您將任何范圍注釋保留為Provide方法之外,則默認情況下它將位於PerLookup范圍內。 我已經從上面修改了您的代碼,使其成為Factory,並且Factory和提供方法服務都在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 ,這就是在默認情況下, PerLookup范圍中的provide方法(不能帶有@Service )的原因 。 限定符也可以放在provide方法上,在這種情況下,provide方法返回的服務將被這些限定符限定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.