使用Dropwizard处理Google的Guice

时间:2017-09-06 18:50:24

标签: java dependency-injection guice dropwizard

我浏览了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包提供的实例相关联。

2 个答案:

答案 0 :(得分:1)

Dropwizard与泽西捆绑在一起,它带有自己的HK2 DI。

如果您尝试使用答案中提到的Guice注入,Guice将拥有它自己的模块上下文,这些模块将无法用于HK2模块。

为了使上述工作,需要一个能在它们之间建立桥梁的库。 HubSpot / dropwizard-guice 就是这样一个桥库。这必须在应用程序的bootstrap阶段完成,这样当Jersey初始化时,HK2就会知道Guice模块。

可以参考以下链接获取更多信息:

https://javaee.github.io/hk2/guice-bridge.html

Guice don't inject to Jersey's resources

答案 1 :(得分:0)

你需要告诉HubSpot的GuiceBundle在哪里寻找资源类  我想,在Guice之前,你必须告诉泽西岛 这是我用来初始化GuiceBundle的一段代码 (假设我的所有资源类都在同一个包中):

GuiceBundle<MyConfiguration> guiceBundle =
        GuiceBundle.<MyConfiguration>newBuilder()
                .addModule(new MyModule())
                .enableAutoConfig(MyResource.class.getPackage().getName())
                .setConfigClass(MyConfiguration.class)
                .build();