Я пытаюсь инициализировать некоторые компоненты в приложении на Джерси в конструкторе Application (вещь, которая наследуется от ResourceConfig). Похоже, что этотДжерси и HK2 ServiceLocator
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?)
Я бы сказал, что вы не можете в полной мере использовать hk2 в 'приложении'. Приложение предоставляет информацию о том, как настроить Джерси. Он также должен сообщить о вашем связанном с Джерси hk2 связующем. Пока эта привязка не состоялась, она недоступна через локатор службы. –
Я регистрирую свое связующее, прежде чем пытаюсь получить доступ к локатору. Все еще не уверен, что я должен делать = D – Bill
Вы уверены, что связующее не только зарегистрировано, но и связывает его экземпляры? –