2016-09-29 1 views
1

У меня есть код как следующийHK2 эквивалент связывания статического впрыска Guice и ProviderBinding

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

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

и Guice связывание выполняется следующим образом

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

requestStaticInjection(ProcessorFactory.class); 

Однако мой проект был создан кем-то еще используя HK2. Может ли кто-нибудь помочь мне с эквивалентной привязкой в ​​HK2? Кажется, что существуют только опции bind, bindAsContract и bindFactory ...

ответ

0

HK2 использует заводы, в которых Guice использует Провайдеров. Если трудно переопределить поставщиков как фабрики, HK2 devs recommend создает класс, который реализует Factory<T> и принимает поставщика как конструктор arg.

+0

А я вижу, спасибо. А как насчет статических инъекций? есть ли эквивалент для 'requestStaticInjection'? – jamesw1234

+0

HK2 не делает статической инъекции из-за трудностей, связанных с жизненным циклом статических инъекций (когда вы можете быть уверены, что это было введено?). Если вам нужны статические инъекции, создайте класс с нестационарными инъекциями (возможно, в области @Immediate), а в postConstruct этой вещи установите статику, которую вам нужно установить – jwells131313