Аннотации HK2 не обрабатываются
Я использую HK2 через Джерси и ищу, чтобы работали сервисы @Immediate. В процессе, я замечаю, что (как кажется) ни одна из аннотаций для моих услуг не регистрируется. Например, после раскрутки моего ServiceLocator и просмотра моего дескриптора службы, аннотированной @Singleton, она все еще установлена как @PerLookup. Мой код для запуска моего приложения ниже:
ApplicationHandler handler = new ApplicationHandler(resourceConfig, new AbstractBinder() { ... });
Мой связыватель регистрирует услугу так:
bindAsContract(ShouldHaveSingletonScope.class);
Глядя на мой ServiceLocator сразу после этого, я вижу, что область не извлекается из класса (все еще @PerLookup). Есть ли что-то дополнительное, что мне нужно указать, чтобы HK2 анализировал аннотации классов? Это похоже на довольно стандартный вариант использования, поэтому я должен что-то упустить.
2 ответа
В ServiceLocatorUtilities есть метод, называемый addClasses
Так что получите доступ к ServiceLocator и просто сделайте
ServiceLocatorUtilities.addClasses(locator, ShouldHaveSingletonScope.class);
Связыватели очень буквальны и будут делать только то, что вы говорите, а не смотреть на классы напрямую.
Это должно работать:
bindAsContract(ShouldHaveSingletonScope.class).in(Singleton.class);
Вы можете настроить локатор вручную, используя Binder
-или же-
использовать аннотации hk2, запустить hk2-inhabitants-generator
(см. hk2 doc), который будет генерировать META-INF/hk2-locator/default
файл, то вам нужно будет создать свой собственный ComponentProvider
(см. документ Джерси), чтобы заполнить локатор службы из этого.