Получение Injectee из Джерси против HK2 - PullRequest
0 голосов
/ 13 сентября 2018

Короткая история : Я хочу получить Injectee из Supplier, который связан с использованием метода AbstractBinder.bindFactory(Class) Джерси.

В основном для обхода JERSEY-3675


Длинная история : Я использовал метод org.glassfish.hk2.api.Factory для создания экземпляра моего RequestScoped Объекта, и жизнь была хорошей.

Я перенес свою регистрацию в Особенность, и тогда жизнь была не из-за ДЖЕРСИ-3675.

Короче говоря, org.glassfish.hk2.utilities.binding.AbstractBinder не работают внутри функций. Нет проблем, подумал я, буду использовать org.glassfish.jersey.internal.inject.AbstractBinder.

Небольшая проблема, с которой я столкнулся: метод Джерси AbstractBinder.bindFactory() принимает Supplier, а не Factory. Нет проблем, подумал я, буду использовать Supplier (мне все равно нравится больше).

Большая проблема, с которой я столкнулся: я использовал org.glassfish.hk2.api.Injectee, чтобы получить InstantiationData о том, кто вызывал инъекцию. Это не вводится, если я не использую HK2 Factory. Javadoc даже говорит, что метод является «неопределенным», если не вызывается из Factory.provide().

Даже если есть Джерси Injectee (org.glassfish.jersey.internal.inject.Injectee), это, кажется, доступно только при использовании Джерси InjectionResolver. Я не хочу использовать InjectionResolver, потому что

  1. HK2 InjectionResolver должно быть Singleton, но я хочу, чтобы в моем инъецированном объекте было RequestScoped.

    • Во втором чтении, однако, InjectionResolver на Джерси ничего не говорит о необходимости быть Singleton. Кто-нибудь может подтвердить?
  2. Я не хочу создавать свою собственную аннотацию для этого (я создал свои собственные аннотации и InjectionResolvers для других случаев)

  3. Я не чувствую себя уверенно, переопределяя @Inject с InjectionResolver. Не уверен, что это значит или как я смогу зарегистрировать несколько из них и заставить их работать вместе (по одному для каждой функции)

Тем временем я использую обходной путь, упомянутый в ошибке.

Я новичок в сцене DI, поэтому, если что-то (или все это) не имеет смысла, пожалуйста, дайте мне знать.

...