有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java与Dropwizard一起使用Google的GUI

我浏览了Guice的official documentation,它说我们需要创建一个包含所有Guice模块的注入器,然后调用如下内容:

  Injector injector = Guice.createInjector(new BillingModule());
    BillingService billingService = injector.getInstance(BillingService.class);

但是当我通过dropwizard-guiceexample时。它正在创建GuiceBundle并将其添加到引导程序中:

bootstrap.addBundle(guiceBundle);

我想了解它的内部工作原理,即如何将代码中任何地方编写的@Inject与Guice bundles提供的实例链接起来


共 (2) 个答案

  1. # 1 楼答案

    您需要告诉HubSpot的GuiceBundle在哪里查找资源类
    我猜在Guice之前你也得对Jersey说同样的话
    下面是我用来初始化GuiceBundle的一段代码
    (假设我的所有资源类都位于同一个包中):

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

    Dropwizard与Jersey捆绑销售,Jersey自带HK2 DI

    如果您尝试使用回答中提到的Guice注入,Guice将有自己的模块上下文,而HK2模块将无法使用

    为了实现上述目标,我们需要一个图书馆,在它们之间架起一座桥梁。HubSpot/dropwizard guice就是这样一个桥接库。这必须在应用程序的引导阶段完成,以便在初始化Jersey时,HK2知道Guice模块

    有关更多信息,请参阅以下链接:

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

    Guice don't inject to Jersey's resources