Dropwizard:dropwizard-guicey 子资源定位器

Dropwizard: dropwizard-guicey sub-resource locators

我正在将我的应用程序从 Jersey2/HK2 迁移到 Dropwizard。我正在使用 dropwizard-guicey 将 Guice 集成到我的应用程序中,同时维护我的一些 HK2 bindings/features。

Dropwizard-guicey 默认绑定单例范围内的所有资源,这让我想知道——在这种情况下绑定子资源的建议方法是什么?在泽西岛,我可以做一些像

这样简单的事情
@Path("{pathParamId}/sub-resource")
public Class<MySubResource> mySubResource() {
    return MySubResource.class;
}

但是我的子资源 class 看起来像这样

public class MySubResource {
    private String id;

    public MySubResource(@PathParam("pathParamId") id) {
        this.id = id;
    }
}

Dropwizard 似乎无法获取 Guice 在 MySubResource 中绑定的依赖项,因为资源全部由 Jersey 管理。

我最终要寻找的是 Jersey 默认为资源和 Guice 提供的每个请求绑定,以便在该级别下进行注入。

在您的示例中,根资源将由 guice(由 resource installer 安装)管理,子资源将由 HK(根据请求)创建。

要在子资源中使用 guice 服务,您需要启用 hk guice bridge:

  • 添加org.glassfish.hk2:guice-bridge:2.5.0-b32依赖
  • 使用 .option(GuiceyOptions.UseHkBridge, true) 启用桥接选项。

我将 complete demo 添加到示例存储库中。它还展示了如何使用纯 guice 实现您的案例。