【发布时间】:2020-05-17 14:32:45
【问题描述】:
我最近开始使用 Google guice DI 框架并且对它很陌生。 我面临以下问题 - @inject 总是返回 null 并且必须调用注入器来注入各种引用。
这是我的AbstractModule类
public class AppModule extends AbstractModule {
private static final Injector injector = Guice.createInjector(new AppModule());
private final Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions(
new DropwizardMetricsOptions().setEnabled(true)
));
private final com.test.reactivex.db.service.DBService dbService;
public AppModule() {
this.dbService = DBService.createProxy(this.vertx, DB_SERVICE_ADDRESS);
}
@Override
protected void configure() {
bind(Vertx.class).toInstance(this.vertx);
bind(EventBus.class).toInstance(this.vertx.eventBus());
bind(FileSystem.class).toInstance(this.vertx.fileSystem());
bind(SharedData.class).toInstance(this.vertx.sharedData());
bind(com.test.reactivex.db.service.DBService.class).toInstance(this.dbService);
bind(AppConfig.class).toProvider(AppConfigProvider.class).in(Singleton.class);
//requestStaticInjection(AppDependenciesInjector.class);
logger.info("Google guice module configuration done");
}
@Provides
public static AppConfig appConfig() {
return injector.getInstance(AppConfig.class);
}
public static Injector getInjector() {
return injector;
}
}
这就是我使用注入器注入依赖项的方式,但问题是我必须再次使用注入器。
public class GraphQLRouter {
@Inject
private static AppConfig config;
@Inject
private com.test.reactivex.auth.service.DBService dbService;
public GraphQLRouter() {
// below code I want to avoid
if (dbService == null) {
dbService = AppModule.getInjector().getInstance(com.test.reactivex.auth.service.DBService.class);
}
}
//below code I want to avoid
static {
if (config == null)
config = AppModule.getInjector().getInstance(AppConfig.class);
}
【问题讨论】:
-
@JeffBowman 请帮忙
-
想知道您是否解决了这个问题?您如何以及在何处创建/注入
GraphQLRouter? -
@kendavidson 仍未排序。 GraphqlRouter 我用来与主根路由器结合使用。
-
你必须在某处初始化一个
GraphqlRouter实例。你没有在你的AppModule中绑定它,所以我不确定你在哪里或如何使用它。如果你打电话给new GraphQLRouter(),那将永远不会被自动注入。 -
另一个问题,您在哪里使用
vertx创建服务器并应用路由?在主要的class Application或类似的东西?
标签: java dependency-injection guice vert.x