Аннотации 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 (см. документ Джерси), чтобы заполнить локатор службы из этого.

Другие вопросы по тегам