使用 Guicier 注入替换 Http RestTemplate [Dropwizard]

Replace Http RestTemplate using Guicier injection [Dropwizard]

我们正在开发一个下拉向导应用程序并使用 Guice 进行注入。
我有以下 http 调用,我正在实例化 http 客户端和 rest 模板。相反,我正在寻找 Guice 注入这些对象的方法。我该怎么做?

RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        HttpEntity request;
        headers.set("Accept", MEDIA_TYPE);
        request = new HttpEntity(jsonContent, headers);

    return restTemplate.exchange(url, httpMethod, request, String.class);

理想情况下,您将为经常创建的对象创建工厂并将工厂作为依赖项注入。对于单元测试,您可以模拟工厂的输出并完全控制代码流。

但是如果你想注入 RestTemplate 作为直接依赖,那么你可以这样写一个模块:

public MyModule extends AbstractModule {
    @Override
    public void configure() {
    }

    @Provides
    public RestTemplate providesRestTemplate() {
        return new RestTemplate();
    }
}

或者像这样:

public MyModule extends AbstractModule {
    @Override
    public void configure() {
        bind(RestTemplate.class);
    }
}

第一个示例使用我个人更喜欢的 Guice @Provides 注释。第二个使用直接绑定到具体 class。两者都达到相同的结果,您可以将依赖项注入 class,如下所示。

public MyClass {
    private final RestTemplate restTemplate;

    @Inject
    public MyClass(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
}