2016-09-29 50 views
1

我有如下代碼HK2相當於吉斯的靜態注射結合和ProviderBinding

public class ProcessorFactory { 
    @Inject static Provider<Processor> processorProvider; 
    ... 
} 

public class ProcessorProvider implements Provider<Processor> { 
    ... 
    @Override 
    public Processor get() { 
    ... 
    } 
} 

和吉斯綁定是如下

bind(Processor.class).toProvider(ProcessorProvider.class).in(ServletScopes.REQUEST); 

requestStaticInjection(ProcessorFactory.class); 

但是我的項目是由別人設置完成使用HK2。有人可以用HK2中的等效綁定來幫助我嗎?似乎只有bind,bindAsContract和bindFactory選項...

回答

0

HK2使用Guice使用提供程序的工廠。如果將供應商重新實現爲工廠是非常困難的,創建一個類實現Factory<T>並接受Provider作爲構造函數arg的類HK2 devs recommend

+0

啊我明白了,謝謝。靜態注射怎麼樣?有沒有相當於'requestStaticInjection'? – jamesw1234

+0

由於與靜態注射的生命週期有關的困難(何時可以確定它已被注射?),HK2不會進行靜態注射。如果您需要靜態注入,請創建一個包含非靜態注入的類(可能位於@Immediate範圍內),並在該東西的postConstruct中設置您需要設置的靜態值 – jwells131313