Короткая история : Я хочу получить 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
, потому что
HK2 InjectionResolver
должно быть Singleton
, но я хочу, чтобы в моем инъецированном объекте было RequestScoped
.
- Во втором чтении, однако,
InjectionResolver
на Джерси ничего не говорит о необходимости быть Singleton
. Кто-нибудь может подтвердить?
Я не хочу создавать свою собственную аннотацию для этого (я создал свои собственные аннотации и InjectionResolvers
для других случаев)
Я не чувствую себя уверенно, переопределяя @Inject
с InjectionResolver
. Не уверен, что это значит или как я смогу зарегистрировать несколько из них и заставить их работать вместе (по одному для каждой функции)
Тем временем я использую обходной путь, упомянутый в ошибке.
Я новичок в сцене DI, поэтому, если что-то (или все это) не имеет смысла, пожалуйста, дайте мне знать.