使用 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;
}
}
我们正在开发一个下拉向导应用程序并使用 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;
}
}