/ / Замініть Http RestTemplate за допомогою ін'єкції Guicier [Dropwizard] - java, інверсія управління, guice, dropwizard, ін'єкція

Замініть Http RestTemplate, використовуючи ін'єкцію Guicier [Dropwizard] - java, інверсія керування, гіцетаж, dropwizard, ін'єкційний

Ми працюємо над програмою майстра крапель і використовуємо Guice for Injection.
У мене є наступний http-дзвінок, і я створюю екземпляр http-клієнта та шаблону відпочинку. Натомість я шукаю способи, як 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);

Відповіді:

3 для відповіді № 1

В ідеалі ви створили б фабрики дляоб'єкти, які часто створюються та вводять фабрики як залежності. Для тестування одиниць ви можете знущатися над виробництвом заводів і мати повний контроль над потоком коду.

Але якщо ви хочете зробити ін’єкцію 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 @ Поля анотація, яку я особисто віддаю перевагу. У другому використовується пряме прив’язання до класу бетону. Обидва досягають однакового результату, і ви можете ввести залежність до класу, як зазначено нижче.

public MyClass {
private final RestTemplate restTemplate;

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