Я пытаюсь инициализировать некоторые компоненты в моем приложении Джерси в конструкторе приложения (вещь, которая наследуется от ResourceConfig). Это выглядит так
public Application(@Context ServletContext context,
@Context ServiceLocator locator)...
Когда я пытаюсь использовать локатор в любой момент, я по-прежнему не могу создавать экземпляры вещей, которые я зарегистрировал в AbstractBinder, используя метод locator.create(MyThing.class).
Я уверен, что они правильно связаны, потому что они правильно вводятся в мои классы ресурсов через аннотацию поля @inject.
Разница в том, что платформа Jersey/HK2 создает экземпляры моих классов ресурсов (как и ожидалось, поскольку они находятся в моем пути сканирования пакетов), но я не могу использовать ServiceLocator через код.
Моя конечная цель - внедрить другие классы без трикотажа, когда они имеют атрибут @Inject, например. У меня есть рабочий класс, который нужно внедрить с настроенным уровнем доступа к базе данных. я хочу сказать
locator.Create(AWorker.class)
и впрыснуть его.
Как мне получить настоящий ServiceLocator, который будет внедрять все, что я уже зарегистрировал/связал с моим Binder? (Или я должен использовать что-то другое, кроме ServiceLocator?)
Application
. Приложение предоставляет информацию о том, как настроить Джерси. Он также должен информировать о вашем переплете hk2, связанном с Джерси. Пока эта привязка не выполнена, она недоступна через сервисный локатор. - person Rafael Winterhalter   schedule 16.01.2014