Я разрабатываю приложение, которое использует Джерси (2.5) в качестве внешнего интерфейса REST и Jetty в качестве встроенного сервера HTTP (S), оба так называемым «встроенным» способом, например. не прибегая к созданию .war
и его развертыванию, а через программную настройку обработчиков, ресурсов, инъекций...
Я хотел бы каким-то образом переопределить HK2 ServiceLocator
, который используется на стороне сервера Джерси, или, возможно, предоставить этому локатору службы родителя для разрешения зависимостей, которые определены вне части REST приложения. Из того, что я вижу в коде, это кажется невозможным: экземпляр ServiceLocator создается внутри ApplicationHandler
посредством вызова Injections
:
if (customBinder == null) {
this.locator = Injections.createLocator(new ServerBinder(application.getProperties()), new ApplicationBinder());
} else {
this.locator = Injections.createLocator(new ServerBinder(application.getProperties()), new ApplicationBinder(),
customBinder);
}
И код в Injections говорит мне следующее:
public static ServiceLocator createLocator(Binder... binders) {
return _createLocator(null, null, binders);
}
что означает, что вновь созданный локатор службы имеет произвольно сгенерированное имя и не имеет родителя.
Есть ли (чистый) способ изменить это поведение, чтобы я ввел свой собственный ServiceLocator в качестве родителя приложения?