簡體   English   中英

HK2居民生成器:如何將工廠綁定到帶注釋的服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM