我浏览了Guice的official documentation,它说我们需要创建一个包含所有Guice模块的注入器,然后调用类似的东西:
Injector injector = Guice.createInjector(new BillingModule());
BillingService billingService = injector.getInstance(BillingService.class);
但是当我通过dropwizard-guice example时。它正在创建GuiceBundle并将其添加到 bootstrap :
bootstrap.addBundle(guiceBundle);
我想了解它的内部工作原理是如何将代码中任何位置写入的 @Inject 与Guice包提供的实例相关联。
答案 0 :(得分:1)
Dropwizard与泽西捆绑在一起,它带有自己的HK2 DI。
如果您尝试使用答案中提到的Guice注入,Guice将拥有它自己的模块上下文,这些模块将无法用于HK2模块。
为了使上述工作,需要一个能在它们之间建立桥梁的库。 HubSpot / dropwizard-guice 就是这样一个桥库。这必须在应用程序的bootstrap阶段完成,这样当Jersey初始化时,HK2就会知道Guice模块。
可以参考以下链接获取更多信息:
答案 1 :(得分:0)
你需要告诉HubSpot的GuiceBundle在哪里寻找资源类 我想,在Guice之前,你必须告诉泽西岛 这是我用来初始化GuiceBundle的一段代码 (假设我的所有资源类都在同一个包中):
GuiceBundle<MyConfiguration> guiceBundle =
GuiceBundle.<MyConfiguration>newBuilder()
.addModule(new MyModule())
.enableAutoConfig(MyResource.class.getPackage().getName())
.setConfigClass(MyConfiguration.class)
.build();