У меня проблема с пониманием того, как внедрить Guice DI в vert.x.
У меня есть очень простая вертикаль Vert.x, которая в основном должна просто запускать сервер с портом с несколькими обработчиками (сейчас есть только один).
Я пытаюсь внедрить все обработчики в мой текст с помощью Guice (сейчас у меня есть только один с именем GetAllProductTypes ). Я создал класс модуля, который расширяет AbstractModule , где я привязываю обработчики к константе HANDLERS в методе "configureHandlers" (см. Module class).
Затем в своей основной статье ( MainVerticle ) я пытаюсь внедрить этот набор обработчиков, используя аннотацию @Named ( HANDLERS ). Тем не менее, значение переменной «обработчики» в этом классе остается нулевым (что означает, что никакого внедрения не произошло).
Я действительно не знаю, как решить такую ситуацию. Это единственный способ увидеть, как это должно работать, и я не уверен в альтернативах. Я помню, что мы делали это на моей предыдущей работе, однако у меня больше нет доступа, чтобы увидеть, как это было реализовано.
Основной класс Verticle:
public class MainVerticle extends AbstractVerticle {
private final Set<RxRoutingHandler> handlers;
public MainVerticle(@Named(HANDLERS) final Set<RxRoutingHandler> handlers)
{
this.handlers = handlers;
}
@Override
public void start() throws Exception {
vertx.createHttpServer()
.requestHandler(req -> req.response()
.end("Hello t"))
.listen(7240);
}
Модуль Guice класс:
public class Module extends AbstractModule {
private final Context context;
public Module() {
context = Vertx.currentContext();
if (context == null) {
throw new RuntimeException("No injector was run");
}
}
@Override
protected void configure() {
configureHandlers();
}
private void configureHandlers() {
final Multibinder<RxRoutingHandler> handlersBinder =
Multibinder.newSetBinder(binder(), RxRoutingHandler.class, Names.named(HANDLERS));
handlersBinder.addBinding().to(GetAllProductTypes.class);
}
}
Мне просто нужно вставить переменную "hanlders" в класс MainVerticle, чтобы содержать обработчики (сейчас только один обработчик), которые я передаю ей.